2012-01-06 25 views
1

私は、primefaces tabPanelに3つのタブを持つポップアップを持っています。中間には "composicao"と呼ばれるテーブルがあり、このタブは最初のタブにあるチェックボックスをマークするとレンダリングされます。 テーブルにはたくさんの入力、選択、チェックボックスがあり、ユーザーは任意の順序で入力できます。したがって、すべてのフィールドを入力してチェックボックスをオンにすると、すべてのフィールドがクリアされ、チェックボックスがtabViewを更新します。私はいくつかのフィールドの即時属性をtrueに設定し、p:ajaxプロセス属性を@allに設定しましたが、この方法では何も起こりません。更新時にフィールドが消去されます。tabview

これは、タブパネルのコードです:

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

は、私は、この問題を解決することができる方法はあります? 私はユーザーこれに代えて、彼らが埋めるためにいくつかの時間を費やすフィールド、チェックボックスをクリックしたときにクリアされて...

+0

おそらく、フォームのどこかで検証エラーが発生しているため、値が更新されていない可能性がありますか?ネストされたフォームの状況がありますか?あなたのフォームは、そのIDを子要素に先付けていますか?おそらくpanelGroup idは実際には 'form:abasCadastroProduto'なので、実際には更新されていませんか?すべてのコードを見なければわかりません。 –

+0

'styleClass'などの不要なコードをすべて削除できますか?また、問題の原因となったチェックボックスを強調表示できますか? –

+0

はいフォームはIDをprependingしています... しかし、この問題は検証になる可能性があります。このフォームには多くの必須フィールドがありますが、必要なフィールドメッセージは受け取りませんでした。 – brevleq

答えて

1

解決済み。 問題は、必要なフィールドの検証だったので、私は、必要なパラメータを作成し、ユーザーがチェックボックスクリックしたときに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にボタンセット「REQUIRED」パラメータを提出作りました。

+0

優れた!これは私の多くを助けた – roel

0

を参照してくださいにunnaceptableだと思う:

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

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

はこれを試します

+2

''にはこの属性がありません。 – BalusC

関連する問題