2011-12-28 67 views
2

我開發了一個自定義組件(靈感來自this article,BalusC),其中包含一個ui:repeat標籤,顯示可點擊表格頁面的列表。
在循環塊內部有一個h:commandLink,它異步調用一個操作,發佈一個參數。參數值在每個循環都會改變。這裏的頁面代碼:帶有h:commandLink的JSF 2自定義組件ui:重複

[...] 
<ui:repeat value="#{cc.attrs.pager.pages}" var="loopPage"> 
    <li> 
     <h:commandLink 
      action="#{cc.attrs.pager.changePage}" 
      value="#{loopPage}" 
      rendered="#{loopPage != cc.attrs.pager.currentPage}" 
      immediate="true" 
     > 
      <f:param name="selectedPage" value="#{loopPage}" /> 
      <f:ajax execute="@this" render="#{cc.attrs.render}" /> 
     </h:commandLink> 

     <h:outputText 
      value="#{loopPage}" 
      rendered="#{loopPage == cc.attrs.pager.currentPage}" 
     /> 
    </li> 
</ui:repeat> 
[...] 

現在,cc.attrs.pager組件屬性指出否則該視圖範圍的支持豆,其pagescurrentPage屬性是通過吸氣劑可見,並且changePage方法是調用動作。 cc.attrs.render組件屬性是每個操作執行後要刷新的目標。下面是相關bean代碼:

[...] 

private Integer[] pages; 
private int currentPage; 

[...] 

public Integer[] getPages() { 
    return pages; 
} 

public int getCurrentPage() { 
    return currentPage; 
} 

[...] 

public void changePage() { 
    HttpServletRequest request = (HttpServletRequest) FacesContext 
     .getCurrentInstance() 
     .getExternalContext() 
     .getRequest() 
    ; 

    String page = request.getParameter("selectedPage"); 
    changePage(Integer.valueOf(page) * rowsPerPage); 
} 

public void changePage(int firstRow){ 
    this.firstRow = firstRow; //Set the first result to be returned 
    loadDataList(); // Load requested page. 
} 

[...] 

最初的渲染是完美的:所有的頁面鏈接正確顯示和當前頁碼沒有聯繫,根據需要。這個問題揭示了另一個頁面:沒有任何反應。
儘管h:commandLink操作使用精確的循環參數值發佈,但響應始終返回相同的頁面(第一個)。 調試它,我發現執行沒有輸入任何兩個changePage方法。 我不確定這個問題是否與ui:repeat有關,但省略它,我可以告訴相同的機制可以用於其他目的。

有什麼建議嗎?

回答

2

我想你應該嘗試與<c:forEach>

+0

感謝您的答覆更換<ui:repeat>。你能解釋我爲什麼要這樣做嗎? – ruphus 2011-12-28 13:03:15

+0

它工作嗎?如果你正在使用莫哈拉,''是越野車。你不應該使用它。 – 2011-12-28 13:06:40

+0

其實我正在使用Mojarra 2.0.6。該錯誤應該是[這一個](http://java.net/jira/browse/JAVASERVERFACES-1807)。你給的解決方案工作正常。感謝您的支持! – ruphus 2011-12-28 13:41:31