更新p:tabView时清除字段

时间:2012-01-06 12:54:45

标签: ajax jsf jsf-2 tabs primefaces

我有一个弹出窗口,在primefaces tabPanel中有三个标签。中间是一个名为“composicao”的表,当用户标记复选框位于第一个选项卡中时,将显示此选项卡。 这些表有很多输入,选择和复选框,用户可以按任何顺序填写,因此如果用户填写所有字段然后标记复选框,则清除所有字段,因为复选框更新tabView。我尝试将一些字段立即属性设置为true并将p:ajax process属性设置为@all,但是这种方法没有任何反应。

这是tabPanel的代码:

<h:panelGroup id="abasCadastroProduto">
        <p:tabView>
            <p:tab title="base">
                <ui:include src="../../tabs/abaEdicaoBaseProduto.xhtml"/>
            </p:tab>
            <p:tab id="abaComposicao" title="composicao" rendered="#{produto.composto}">
                <ui:include src="../../tabs/abaEdicaoComposicaoProduto.xhtml"/>
            </p:tab>
            <p:tab
                    title="tributacao">
                <ui:include src="../../tabs/abaEdicaoTributacaoProduto.xhtml"/>
            </p:tab>
        </p:tabView>
    </h:panelGroup>

这是第一个标签代码的一部分:

<h:panelGroup layout="block">
<p:fieldset legend="geral">
<h:panelGroup layout="block">
    <h:selectBooleanCheckbox id="produtoAtivoCheck"
                             value="#{produto.ativo}"/>
    <h:outputLabel value="ativo" for="produtoAtivoCheck"/>
    <h:selectBooleanCheckbox id="produtoMovimentoCheck"
                             value="#{produto.movimentaEstoque}"/>
    <h:outputLabel value="movimento" for="produtoMovimentoCheck"/>

    <!-- THIS IS THE CHECKBOX -->
    <h:selectBooleanCheckbox id="produtoCompostoCheck"
                             value="#{produto.composto}">
        <p:ajax event="change" update="abasCadastroProduto" process="@all"/>
    </h:selectBooleanCheckbox>

    <h:outputLabel value="composto" for="produtoCompostoCheck" />
</h:panelGroup>
.......
<h:panelGroup layout="block">
    <h:outputLabel value="descricao"/>
    <p:inputText value="#{produto.descricao}" required="true" immediate="true"
                 requiredMessage="obrigatorio"/>
    <h:outputLabel value="complemento"/>
    <p:inputText value="#{produto.descricaoComplementar}"/>
</h:panelGroup>
......
</p:fieldset>
</h:panelGroup>

有没有办法可以解决这个问题? 我认为用户看到他们花费一些时间填写的字段是无法发现的,当你点击一个复选框时就被清除了......

2 个答案:

答案 0 :(得分:1)

解决。 问题是必填字段的验证,所以我创建了一个REQUIRED参数,并在用户点击复选框时将其设置为false:

<h:selectBooleanCheckbox id="produtoCompostoCheck"
                     value="#{produto.composto}" styleClass="popup-produto-geral-check">
        <f:param name="REQUIRED" value="false"/>
        <f:ajax event="change" immediate="true" render="abasCadastroProduto" execute="@form" />
</h:selectBooleanCheckbox>
<h:selectOneMenu value="#{produto.idClasse}" immediate="true"
                     required="#{param['REQUIRED']}" validatorMessage="#{cadastroMsg['popup.cadastro.produto.base.classe.invalido']}"
                     requiredMessage="#{cadastroMsg['popup.cadastro.produto.base.classe.obrigatorio']}">
        <f:selectItems value="#{selectItemClasse.itens}"/>
        <f:ajax event="change" immediate="true" render="selectSubclasse"/>
</h:selectOneMenu>

我已将提交按钮设置为“REQUIRED”参数为true。

答案 1 :(得分:0)

而不是:

<p:ajax event="change" update="abasCadastroProduto" process="@all"/> 

试试这个:

<p:ajax render="@form" />