2013-01-09 91 views
6

我需要在做一个动作(显示错误消息等)后刷新p:tabView。如何只更新p:tabView的活动标签?

要验证的字段位于各个选项卡上。当我更新整个tabView时,这当然是bug的行为,因为在PrimeFaces中,不可见标签不应该被更新(因为编辑字段是不可见的,当它们被刷新时,它们正在丢失它们的值,例如p:autoComplete是调零)。

所以,我应该只更新活动选项卡,但如何使用commandButton的更新属性只有活动选项卡,而不是整个p:tabView?

回答

4

我做了简短的例子:

<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> 

然而,当我通过ID或通过使用@parent(如我在标签1做)的标签(DIV)被删除,奇怪更新p:tab。 ..解决方法是将标签的内容包装在容器中,就像我在标签2中那样。


HA!找到为什么你不能直接更新选项卡的原因: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> 
+0

但我还没有写的按钮选项卡里面,他们是不是在我的情况。 –

+0

并且更新整个tabView会导致不可见标签中的值被重置为空 –

+0

@lechlukasz通过tabview外的按钮查看更新;-) – siebz0r