我正在使用JSF2和PrimeFaces3。我如何編寫selectOneMenu來調用JSF導航,以便在菜單中更改選項時將用戶重定向到另一個頁面?JSF/PrimeFaces selectOneMenu更改視圖ID
回答
附加一個ajax監聽器,讓它通過NavigationHandler
導航。
例如
<h:form>
<h:selectOneMenu value="#{navigator.outcome}">
<f:selectItem itemLabel="Select page..." />
<f:selectItem itemValue="page1" itemLabel="Page 1" />
<f:selectItem itemValue="page2" itemLabel="Page 2" />
<f:selectItem itemValue="page3" itemLabel="Page 3" />
<f:ajax listener="#{navigator.navigate}" />
</h:selectOneMenu>
</h:form>
(上面的例子中預計page1.xhtml
,page2.xhtml
和在相同的上下文page3.xhtml
;甚至可以使一個<f:selectItems>
代替)
與
private String outcome;
public void navigate() {
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(context, null, outcome + "?faces-redirect=true");
}
的?faces-redirect=true
是沒有必要,但它有效地發送重定向,以便瀏覽器地址欄中的URL可以正確更改,這對用戶體驗更好和書籤的頁面。
你可能有這樣的事情:
<p:selectOneMenu value="#{myBean.mySelectedPage}">
<f:selectItem itemValue="http://www.yahoo.com" itemLabel="yahoo" />
<f:selectItem itemValue="http://www.google.com" itemLabel="google" />
<f:selectItem itemValue="search.jsf" itemLabel="search" />
<p:ajax event="change" listener="#{myBean.myNavigationMethod}" />
</p:selectOneMenu>
,並在你的navigationMethod您有:
String myPage = mySelectedPage
FacesContext.getCurrentInstance().getExternalContext().redirect(myPage);
前兩個selectItem
是一個完整的URL,最後一個是在另一頁你web應用程序(請注意,擴展名必須是在web.xml中設置的擴展名 - 它可以是.jsf,.xhtml,.htm等)
而不是使用ajax導航u如下:
<p:selectOneMenu value="#{navigator.outcome}" onchange="window.location =this.options[this.selectedIndex].value">
<f:selectItem itemLabel="Select page..." />
<f:selectItem itemValue="page1" itemLabel="Page 1" />
<f:selectItem itemValue="page2" itemLabel="Page 2" />
<f:selectItem itemValue="page3" itemLabel="Page 3" />
<p:ajax event="change" listener="#{navigator.navigate}" />
</p:selectOneMenu>
即使會話超時,此功能仍然有效。
我嘗試過使用ajax方法,但是一旦會話超時,剩下的菜單就不會響應任何內容。 –
請注意,OP明確詢問「調用JSF導航」。也許他確實需要以編程方式進行,例如因爲他需要跟蹤麪包屑/歷史記錄等頁面。 – BalusC
- 1. PrettyFaces導航selectOneMenu更改
- 2. java.lang.IllegalStateException:在視圖中已經找到組件ID。用selectOneMenu用於
- 3. SelectOneMenu更改時PrimeFaces更新庫
- 4. SelectOneMenu僅在更新後更改其值
- 5. SelectOneMenu更新其他SelectOneMenu
- 6. 更改視圖
- 7. 更改視圖
- 8. selectOneMenu更改爲inputText的不可寫
- 9. Primefaces selectOneMenu不會在更改時執行
- 10. 使用javascript更改primefaces selectonemenu標籤/值
- 11. gmaps4rails更改地圖ID
- 12. 更改視圖slowjs
- 13. 更改視圖iphone
- 14. 更改Silverlight視圖
- 15. Vuejs更改視圖
- 16. 更改圖庫視圖?
- 17. JSF selectonemenu不更新
- 18. 列表視圖自動更改視圖?
- 19. 在網格視圖中更改視圖
- 20. UISegmented視圖來更改視圖
- 21. 容器視圖動態更改視圖
- 22. 從子視圖中更改視圖
- 23. 動態更改YouTube上的視頻ID
- 24. 方向更改時未找到針對id的視圖IllegalArgumentException:?
- 25. 只更改特定ID或類的列表視圖
- 26. 列表視圖按鈕ID在滾動listview上更改Android
- 27. 視圖id是改變語言
- 28. 更改客戶區視圖
- 29. 更改ExpandableListView編輯視圖
- 30. 更改視圖 - 煎茶
工程就像一個魅力。謝謝! – mm1
不客氣。 – BalusC
我還沒有看到評論(我不知道爲什麼),否則我不會評論... – spauny