Java Primefaces选项卡视图activeIndex属性始终为空
Primefaces选项卡视图activeIndex属性始终为空 myview.jsf:Java Primefaces选项卡视图activeIndex属性始终为空,java,google-app-engine,jsf-2,primefaces,Java,Google App Engine,Jsf 2,Primefaces,Primefaces选项卡视图activeIndex属性始终为空 myview.jsf: <h:form> <p:growl id="growl" showDetail="true" /> <p:tabView > <p:ajax event="myForm" listener="#{employeeEdit.onTabChange}" /> <p:tab id="basic" title="Login"> </p:tab>
<h:form>
<p:growl id="growl" showDetail="true" />
<p:tabView >
<p:ajax event="myForm" listener="#{employeeEdit.onTabChange}" />
<p:tab id="basic" title="Login">
</p:tab>
<p:tab id="personal" title="Personal">
</p:tab>
<p:tab id="contact" title="Contact">
</p:tab>
</p:tabView>
但总是得到tabIndex=0;为什么会这样?AJAX运行良好。但是单击查看页面选项卡中的编辑按钮时,index变为null。
在view.jsf中,我的命令按钮是
<p:commandButton value="Edit" actionListener="#{employeeEdit.edit}" />
我的primefaces版本是:带有谷歌云SQL的primefaces-3.0.M3
public void edit() throws IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect("/employeeedit.jsf");
}
上面的edit
方法将重定向到一个新视图,此时您的@ViewScoped
托管beanEmployeeEdit
将被销毁。因此,当再次实例化时,tabIndex
被初始化为0(因为0是Java中int
s的默认值)
顾名思义,@ViewScoped
适用于一个视图,当您希望在同一视图上创建一些PPR时。因此,当您重定向到其他视图时,它将被销毁
在这种情况下,您可以使用
@SessionScoped
,会话持续时间与会话持续时间相同。实际上,我认为您可能不需要使用@SessionScoped
bean。事实上,如果不经常重用这个bean中的数据,可能会造成很大的资源浪费
我认为你应该保持你的bean@viewscope,并利用
。您可以尝试以下方法:
<p:tabView id="myid" activeIndex="#{param.tabIndex}" >
...
</p:tabView>
<p:commandButton value="Edit" action="employeeedit" ajax="false">
<f:param name="tabIndex" value="#{employeeEdit.tabIndex}" />
</p:commandButton>
...
这可能会为您节省一些资源,并且您不需要使用edit
功能将用户重定向到编辑页面。您可以发布整个托管bean(EmployeeEdit
)吗?现在您只发布了您所说的正在工作的部分。如果您让您的员工编辑
,会发生什么情况?@βɛƨǤʋʋʋʋɢ:现在工作正常。非常感谢!我把它贴出来作为答复。你可以接受它,将你的帖子标记为已解决。嗯,这不是解决方案,这是一种变通方法。在同一会话中的不同浏览器选项卡/窗口中打开同一页面,并在每个选项卡/窗口中进行播放。你会明白为什么这不是一个解决方案。“在你的重定向功能中,我觉得你是在重定向到同一个编辑页面。”不,他实际上是在从view.jsf
重定向到edit.jsf
@βɛǤʋʋɢ:谢谢你纠正我的错误。我更新了我的答案。当我放置AJAX event=“tabChange”时,监听器正在工作。当我没有改变我的标签时,上一个标签索引就出现了。这是因为`private int tabIndex下次EmployeeEdit.java)
时,code>未设置为0。我如何解决此问题?
public void edit() throws IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect("/employeeedit.jsf");
}
<p:tabView id="myid" activeIndex="#{param.tabIndex}" >
...
</p:tabView>
<p:commandButton value="Edit" action="employeeedit" ajax="false">
<f:param name="tabIndex" value="#{employeeEdit.tabIndex}" />
</p:commandButton>