Поля очищаются при обновлении p: tabView - PullRequest
1 голос
/ 06 января 2012

У меня есть всплывающее окно с тремя вкладками в основных панелях tabPanel.Посередине находится таблица с именем "composicao", эта вкладка отображается, когда пользователь отмечает флажок, расположенный на первой вкладке.Таблицы имеют много входных данных, полей выбора и флажков, которые пользователь может заполнять в любом порядке, поэтому, если пользователь заполняет все поля и затем ставит флажок, все поля очищаются, поскольку этот флажок обновляет tabView.Я попытался установить для некоторых полей немедленный атрибут true и установить для атрибута процесса p: ajax значение @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>

thisявляется частью кода первой вкладки:

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

1 голос
/ 20 января 2012

решаемая. Проблема заключалась в проверке обязательных полей, поэтому я создал параметр 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>

и я сделал кнопку отправки, установив для параметра «ТРЕБУЕМЫЙ» значение true.

0 голосов
/ 20 января 2012

вместо этого:

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

попробуйте это:

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