Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF/PrimeFaces SelectOne菜单更改视图id_Jsf_Jsf 2_Navigation_Primefaces_Selectonemenu - Fatal编程技术网

JSF/PrimeFaces SelectOne菜单更改视图id

JSF/PrimeFaces SelectOne菜单更改视图id,jsf,jsf-2,navigation,primefaces,selectonemenu,Jsf,Jsf 2,Navigation,Primefaces,Selectonemenu,我正在使用JSF2和PrimeFaces3。当用户更改菜单中的选项时,如何编写selectOneMenu来调用JSF导航以将用户重定向到另一个页面?附加一个ajax侦听器并让它导航 例如 ?faces redirect=true是不必要的,但它有效地发送了一个重定向,以便浏览器地址栏中的URL将正确更改,这对用户体验和页面的书签能力更有利。您可以有如下功能: <p:selectOneMenu value="#{myBean.mySelectedPage}"> &

我正在使用JSF2和PrimeFaces3。当用户更改菜单中的选项时,如何编写selectOneMenu来调用JSF导航以将用户重定向到另一个页面?

附加一个ajax侦听器并让它导航

例如


?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>

前两个
selectItem
用于完整的url,最后一个用于web应用程序中的另一个页面(请注意,扩展名必须是web.xml中设置的扩展名,可以是.jsf、.xhtml、.htm等)

使用以下选项,而不是使用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>


即使会话超时,这也有效。

我还没有看到评论(我不知道为什么),否则我不会发表评论…@spauny:我不知道你的意思。你不是说“回答”而不是“评论”吗?好吧,如果你觉得你的答案是多余的,就把它删掉。是的,对不起,我是说答案。。。我的回答不是完全多余的;它还介绍了使用
重定向
而不是
导航处理程序
进行导航:DI尝试使用ajax方法,但一旦会话超时,您将看到一个菜单,该菜单不会响应任何内容。请注意,OP显式询问“调用JSF导航”。也许他真的需要通过编程来完成,例如,因为他需要跟踪面包屑/历史等页面。
<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>
String myPage = mySelectedPage
FacesContext.getCurrentInstance().getExternalContext().redirect(myPage);
<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>