2012-01-06 22 views
1

我有一個在primefaces tabPanel中有三個選項卡的彈出窗口。中間是一個名爲「composicao」的表格,當用戶標記位於第一個選項卡中的複選框時,此選項卡會呈現。 這些表格有很多輸入,選擇和複選框,用戶可以按任意順序填寫,所以如果用戶填寫所有字段,然後標記複選框,則會清除所有字段,使複選框更新tabView。我嘗試設置一些字段的立即屬性爲true,並將p:ajax process屬性設置爲@all,但是這種方法沒有任何反應。當更新p時,字段被清除:tabView

這是一個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> 

有沒有一種辦法可以解決這個問題? 我認爲是unnaceptable用戶看到他們花一些時間來填補,被清除場,當你在一個複選框點擊...

+0

也許驗證錯誤發生在窗體的某處,並導致值不更新自己?你有嵌套表單的情況嗎?您的表單是否將其ID添加到子元素上?也許panelGroup id實際上是'form:abasCadastroProduto',因此它實際上並沒有得到更新?除非我們看到所有的代碼,否則無法分辨。 – 2012-01-06 13:08:40

+0

你可以刪除像'styleClass'等所有不必要的代碼嗎?你還可以突出顯示哪個複選框導致了問題? – 2012-01-06 13:19:06

+0

是表單正在預先編號... 但我相信問題可能是驗證,這種形式有很多必填字段,但我沒有收到任何必需的現場消息... – brevleq 2012-01-06 14:26:15

回答

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。

+0

優秀!!!這幫了我很多 – roel 2012-02-28 13:45:14

0

,而不是這樣的:

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

試試這個:

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

''沒有這個屬性。 – BalusC 2012-01-20 12:43:36

相關問題