我正在使用 JSF2 和 PrimeFaces3。当用户更改菜单中的选项时,如何编写将调用 JSF 导航以将用户重定向到另一个页面的 selectOneMenu?
问问题
7256 次
3 回答
8
附加一个 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>
改为 a )
和
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 将正确更改,这对用户体验和页面的可收藏性更好。
于 2011-11-24T11:31:53.433 回答
2
你可以有类似的东西:
<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 等)
于 2011-11-24T11:52:17.837 回答
0
而不是使用 ajax 导航使用以下内容:
<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>
即使会话超时,这也有效。
于 2013-02-27T11:18:19.077 回答