【发布时间】:2013-05-11 03:57:19
【问题描述】:
我有一个包含两个选项卡的选项卡视图。
当我从选项卡 1 切换到选项卡 2 时,我正在调用一些代码来执行验证并更新一些值。根据此验证的结果,我想留在选项卡 1 上,或者转到选项卡 2,然后刷新选项卡的内容。
我的标签视图:
<h:form id="form">
<p:tabView id="tabview" activeIndex="#{ctrl.idx}" dynamic="true" cache="false">
<p:ajax event="tabChange" listener="#{ctrl.doStuff}" update=":form:tabview"/>
<p:tab title="Tab 1" id="t1">
<h:panelGrid columns="1" cellpadding="10">
<h:outputText value="#{ctrl.s1}"/>
</h:panelGrid>
</p:tab>
<p:tab title="Tab 2" id="t2">
<h:panelGrid columns="1" cellpadding="10">
<h:outputText value="#{ctrl.s2}"/>
</h:panelGrid>
</p:tab>
</p:tabView>
</h:form>
我的测试代码只是改变了值:
public void doStuff() {
s1 = String.valueOf(Math.random());
s2 = String.valueOf(Math.random());
}
我认为在我的方法中更改活动标签索引就足够了,就像这样:
public void doStuff() {
// ...
idx = 0;
}
在 tabChange 事件中,方法被调用,但 tabview 组件转到单击的选项卡,忽略 idx 新值。
我认为将更新属性添加到 p:ajax 会呈现整个选项卡视图,但只会重新呈现选项卡和/或选项卡的内容。
最奇怪的是,如果我将 update=":form:tabview" 更改为 update=":form" 或 update="@form",我只会在 ajax 响应中收到选项卡的内容 -> 组件会从页面中消失!
我的 bean 是 viewscoped,我使用的是 Primefaces 3.5、JSF 2.1 和 Tomcat 7。
有什么想法吗?谢谢。
【问题讨论】:
标签: ajax jsf-2 primefaces