2012-05-03 58 views
0

如何将参数添加到a4j:commandLink?检入调试模式时,该参数始终为空。jsf - 从ajax请求中检索参数

网页代码:

<a4j:form> 
    <a4j:commandLink reRender="content" action="#{surveyEvaluationBean.doDetailEvaluation}"> 
     <f:param name="question" value="#{result.question.pK.longValueAsString}" /> 
     <h:graphicImage url="/survey/img/cloverleaf.jpg" styleClass="srv-analysis-cloverleaf" /> 
    </a4j:commandLink> 
</a4j:form> 

豆:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    String param = request.getParameter("question"); 

我刚刚发现的错误。 a4j-components没有问题,错误如下:我无法正确创建问题对象。所以PK是真的无效。我很抱歉浪费你的时间。

+0

什么是'result.question.pk.longValueAsString'? – Ved

+0

'result'是我的a4j:repeat的var名称,'getLongValueAsString()'以字符串值的形式重复pk对象 –

回答

1

我刚发现错误。 a4j-components没有问题,错误如下:我无法正确创建问题对象。所以PK是真的无效。我很抱歉浪费你的时间。

1

1)这应该工作

Map<String,String> params = 
    FacesContext.getExternalContext().getRequestParameterMap(); 
String question = params.get("question"); 

JSF 2 param example

2)这里的另一种方式来实现它

<a4j:commandLink reRender="content" action="#{surveyEvaluationBean.doDetailEvaluation}"> 
    <a4j:actionparam name="question" value="#{result.question.pK.longValueAsString}"/> 
</a4j:commandLink> 
在你只需要一个getter/setter方法豆

,你不需要自己检索 这个参数。 a4j:actionparam自动执行分配。 (由Max卡茨)

看这里Sending parameter to a Controller

和最后一个

3)如果你使用EL 2及以上的,你可以把它作为一个参数doDetailEvaluation

这样

<a4j:commandLink reRender="content" action="#{surveyEvaluationBean.doDetailEvaluation(result.question.pK.longValueAsString)}"/>