我有一个包含两个选项卡的选项卡 View 。
当我从选项卡 1 切换到选项卡 2 时,我正在调用一些执行验证并更新一些值的代码。根据此验证的结果,我想留在选项卡 1 上,或者转到选项卡 2,然后刷新选项卡的内容。
我的标签 View :
<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
新的值(value)。我想为
p:ajax
添加更新属性将呈现整个选项卡 View ,但仅重新呈现选项卡和/或选项卡的内容。最奇怪的是,如果我更改
update=":form:tabview"
至update=":form"
或 update="@form"
,我只在ajax响应中收到选项卡的内容->组件从页面中消失!我的 bean 是 viewscoped,我使用的是 Primefaces 3.5、JSF 2.1 和 Tomcat 7。
任何的想法?谢谢。
最佳答案
我很容易解决这个问题:
public void onSPTabChange(TabChangeEvent event)
{
TabView tabView = (TabView) event.getComponent();
currentData.setSP_Index(tabView.getChildren().indexOf(event.getTab())+1);
}
在 currentdata 我有属性 SP_Index 与选项卡数(第一,第二......)
<p:tabView id="tabView" styleClass="tabView">
<p:ajax event="tabChange" listener="#{dataAccess.onSPTabChange}" />
....
并添加 jquery 脚本
<script>
$("#tabView li:nth-child(#{currentData.SP_Index})").click();
</script>
关于ajax - Primefaces tabview : set the active index on tab change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16584359/