如何仅更新p:tabView的活动选项卡?

时间:2013-01-09 13:22:08

标签: jsf jsf-2 tabs primefaces refresh

我需要在执行操作后刷新p:tabView(显示错误消息等)。

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

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

1 个答案:

答案 0 :(得分:5)

<击> 我做了一个简短的例子:

<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更新p:tab或使用@parent(就像我在标签1中所做的那样)时,标签(div)会被删除,很奇怪...一个解决方法是包装像我在标签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>