我開發了一個自定義組件(靈感來自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
組件屬性指出否則該視圖範圍的支持豆,其pages
和currentPage
屬性是通過吸氣劑可見,並且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
有關,但省略它,我可以告訴相同的機制可以用於其他目的。
有什麼建議嗎?
感謝您的答覆更換
<ui:repeat>
。你能解釋我爲什麼要這樣做嗎? – ruphus 2011-12-28 13:03:15它工作嗎?如果你正在使用莫哈拉,''是越野車。你不應該使用它。 –
2011-12-28 13:06:40
其實我正在使用Mojarra 2.0.6。該錯誤應該是[這一個](http://java.net/jira/browse/JAVASERVERFACES-1807)。你給的解決方案工作正常。感謝您的支持! – ruphus 2011-12-28 13:41:31