我需要在执行操作后刷新 p:tabView(以显示错误消息等)。
要验证的字段位于各个选项卡上。当我更新整个 tabView 时,这当然是错误的行为,因为在 PrimeFaces 中不可见的选项卡不应该被更新(因为编辑字段是不可见的,当它们被刷新时,它们会丢失它们的值,例如 p:autoComplete 是无效)。
所以,我应该只更新活动选项卡,但是如何只使用命令按钮的更新属性来定位活动选项卡,而不是整个 p:tabView?
我需要在执行操作后刷新 p:tabView(以显示错误消息等)。
要验证的字段位于各个选项卡上。当我更新整个 tabView 时,这当然是错误的行为,因为在 PrimeFaces 中不可见的选项卡不应该被更新(因为编辑字段是不可见的,当它们被刷新时,它们会丢失它们的值,例如 p:autoComplete 是无效)。
所以,我应该只更新活动选项卡,但是如何只使用命令按钮的更新属性来定位活动选项卡,而不是整个 p:tabView?
我做了一个简短的例子:
<h:form id="form">
<p:tabView id="tabview">
<p:tab title="tab 1">
<p:commandButton value="update" update="@parent" />
</p:tab>
<p:tab title="tab 2">
<p:outputPanel id="tab2">
<p:commandButton value="update" update=":form:tabview:tab2" />
</p:outputPanel>
</p:tab>
</p:tabView>
</h:form>
但是,当我p:tab
通过 ID 或使用@parent
(就像我在选项卡 1 中所做的那样)更新选项卡(div)时,它会被删除,这很奇怪......一种解决方法是将选项卡的内容包装在一个容器中,就像我在选项卡 2 中所做的那样.
哈!找到无法直接更新标签的原因:https ://code.google.com/p/primefaces/issues/detail?id=3518
tabview 外的按钮示例:
<h:form id="form">
<p:tabView id="tabview" binding="#{tabView}">
<p:ajax event="tabChange" update=":form:button" />
<p:tab title="tab 1">
<p:outputPanel id="tab0">
<p:panel>text</p:panel>
</p:outputPanel>
</p:tab>
<p:tab title="tab 2">
<p:outputPanel id="tab1">
<p:panel>text</p:panel>
</p:outputPanel>
</p:tab>
</p:tabView>
<p:commandButton id="button" value="update"
update=":form:tabview:tab#{tabView.activeIndex}" />
</h:form>