2012-05-03 87 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)}"/>