Java Primefaces选项卡视图activeIndex属性始终为空

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>

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>
<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
托管bean
EmployeeEdit
将被销毁。因此,当再次实例化时,
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 tabIndexEmployeeEdit.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>