我正在使用Primefaces 3.5并且在更改ActiveIndex时遇到了问题。在选项卡之间进行时,ActiveIndex不会更改。这是我的TabMenu代码:
<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>
toolbarBean.java
@Named
@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";
}
}
}
在为变量currentTab分配正确值的情况下,操作部分正常工作。但是,一旦它运行页面重定向部分,toolbarBean将被重置,activeIndex将再次从0开始。有没有人对我做错了什么有任何想法?
答案 0 :(得分:0)
我尝试重现错误但未成功。
我相信我使用的代码示例具有您需要的功能。看看:
* 视图
<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>
受管Bean
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";
}
}
}
请注意,ToolbarBean几乎相同。在使用@Named时,查看ManagedBean是否确实在会话范围内。
另一件值得一提的是main.xhml,page1.xhtml,page2.xhtml等,除了中心布局单元内容外,其他内容相同。
答案 1 :(得分:0)
在这个问题中查看我的答案:
How to change activeindex in TabMenu
我认为这就是你要找的东西。
修改强> 这是完整的答案:
我在PrimeFaces展示中找到了一个解决方案。您可以向menuitem添加请求参数,并将此参数附加到您的网址。因此,不需要支持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>