Primefaces 更改选项卡菜单中的ActiveIndex
我正在使用Primefaces 3.5,在更改ActiveIndex时遇到了一个问题。在选项卡之间切换时,ActiveIndex不会更改。这是我的选项卡菜单代码:Primefaces 更改选项卡菜单中的ActiveIndex,primefaces,tabs,Primefaces,Tabs,我正在使用Primefaces 3.5,在更改ActiveIndex时遇到了一个问题。在选项卡之间切换时,ActiveIndex不会更改。这是我的选项卡菜单代码: <h:form id="formMenu"> <p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}"> <p:menuitem value="Main" action="#{toolbarBean.changeAct
<h:form id="formMenu">
<p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}">
<p:menuitem value="Main" action="#{toolbarBean.changeActiveIndex(0)}" />
<p:menuitem value="Page2" action="#{toolbarBean.changeActiveIndex(1)}" />
<p:menuitem value="Page3" actionListener="#{toolbarBean.changeActiveIndex(2)}" />
<p:menuitem value="Page4" action="#{toolbarBean.changeActiveIndex(3)}" />
</p:tabMenu>
</form>
}
当变量currentTab被分配了正确的值时,动作部分可以正常工作。但是,一旦运行页面重定向部分,toolbarBean将被重置,activeIndex将再次从0开始。有人知道我做错了什么吗?我试图重现错误,但没有成功 我相信我使用的代码示例具有您需要的特性。请查看: *景色 请注意,ToolbarBean几乎是相同的。在使用@Named时,请查看ManagedBean是否确实在会话范围内
另一件值得一提的事情是main.xhtml、page1.xhtml、page2.xhtml等都有相同的内容,除了中心布局单元的内容。看看我对这个问题的回答: 我想这就是你要找的 编辑: 以下是完整的答案: 我在PrimeFaces showcase中找到了一个解决方案。您可以向menuitem添加请求参数,并将此参数附加到url。因此,不需要支持bean来保持活动索引:
<p:tabMenu activeIndex="#{param.i}">
<p:menuitem value="Home" icon="ui-icon-home" url="page1.xhtml?i=0">
<f:param name="i" value="0" />
</p:menuitem>
<p:menuitem value="Search" icon="ui-icon-search" url="page2.xhtml?i=1">
<f:param name="i" value="1" />
</p:menuitem>
...
</p:tabMenu>
...
那么,您想做什么?我希望它更改选项卡的活动索引,以便用户可以看到当前页面的选项卡处于活动状态。为什么不像在Showcase中一样使用?将页面链接放在p:menuitem的“url”属性中,而不是在bean中控制它。看一看:请注意,第3页选项卡上的actionListener不会生成导航。的可能重复虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。对不起,我有点懒;-)为什么您的解决方案更好@ErkanErol?@QueryLars,因为您必须在方法中的所有刷新和重定向中发送索引。这很难维持。
<p:layout fullPage="true">
<p:layoutUnit position="north" size="100" header="Top" resizable="true" closable="true" collapsible="true">
<h:form id="formMenu">
<p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}">
<p:menuitem value="Main" action="#{toolbarBean.changeActiveIndex(0)}" />
<p:menuitem value="Page2" action="#{toolbarBean.changeActiveIndex(1)}" />
<p:menuitem value="Page3" action="#{toolbarBean.changeActiveIndex(2)}" />
<p:menuitem value="Page4" action="#{toolbarBean.changeActiveIndex(3)}" />
</p:tabMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="south" size="100" header="Bottom" resizable="true" closable="true" collapsible="true">
<h:outputText value="South unit content." />
</p:layoutUnit>
<p:layoutUnit position="west" size="200" header="Left" resizable="true" closable="true" collapsible="true">
<h:outputText value="West unit content." />
</p:layoutUnit>
<p:layoutUnit position="east" size="200" header="Right" resizable="true" closable="true" collapsible="true" effect="drop">
<h:outputText value="Right unit content." />
</p:layoutUnit>
<p:layoutUnit position="center">
MAIN
</p:layoutUnit>
</p:layout>
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class ToolbarBean implements Serializable {
private int currentTab;
public int getCurrentTab() {
return currentTab;
}
public void setCurrentTab(int currentTab) {
this.currentTab = currentTab;
}
public String changeActiveIndex(int currentTab) {
this.currentTab = currentTab;
switch (currentTab) {
case 0:
return "main";
case 1:
return "page2";
case 2:
return "page3";
case 3:
return "page4";
default:
return "page5";
}
}
}
<p:tabMenu activeIndex="#{param.i}">
<p:menuitem value="Home" icon="ui-icon-home" url="page1.xhtml?i=0">
<f:param name="i" value="0" />
</p:menuitem>
<p:menuitem value="Search" icon="ui-icon-search" url="page2.xhtml?i=1">
<f:param name="i" value="1" />
</p:menuitem>
...
</p:tabMenu>