2013-04-23 26 views
0

我用primefaces的動態overlayPanel一個p:tab內一個p:dialog裏面是這樣的:overlaypanel primefaces犯規內部對話做工精細的內部TabView的

<p:dialog id="dialog" modal="true" header="Nouveau Article" 
      widgetVar="dlg"> 

      <h:form prependId="false" enctype="multipart/form-data"> 

    <p:tabView id="monpanel"> 

        <p:tab id="tab1" title="Informations"> 
        .... 
        </p:tab> 
        <p:tab id="tab2" title="Prix"> 
        .... 
        </p:tab> 
    <p:tab id="tab3" title="Stock et fournisseurs"> 


         <h:outputLabel value="" /><h:outputLabel value="" /><h:outputLabel value="" /> 

         <p:commandButton id="carBtn" value="Selectionner Fournisseurs" type="button" /> 

         <p:overlayPanel appendToBody="true" my="left top" id="carPanel" for="carBtn" hideEffect="fade" 
          dynamic="true"> 
          <p:dataTable id="table" var="car" rowKey="#{car.fournisseurId}" 
          value="#{articlesMB.listfournisseurs}" selection="#{articlesMB.selectedFournisseurs}" 
           rows="10" paginator="true" > 
           <p:column selectionMode="multiple" style="width:20px" /> 
           <p:column headerText="Id"> 
            <h:outputText value="#{car.fournisseurId}" /> 
           </p:column> 

           <p:column headerText="Nom"> 
            <h:outputText value="#{car.personne.nom}" /> 
           </p:column> 

          </p:dataTable> 
         </p:overlayPanel> 

         </p:tab> 
         </p:tabView> 
<p:commandButton id="article-ajouter" 
        update=":messages monpanel :articlesdata" 
        action="#{articlesMB.ajouter}" value="add" /> 
         </h:form> 
         </p:dialog> 

在第一時間它工作正常,但是當我點擊Add按鈕和驗證失敗(因任何原因),我點擊overlaypanel的動態按鈕,看來但是當我選中或取消選中的數據表排它消失的一個,我不知道原因

你有什麼想法如何解決這個問題

回答

1

您cammandButton應該使用'process'屬性,指定要提交信息的組件(不指定疊加)。

對於前:

<p:inputText id="txttest" required="true" value="" /> 
<p:commandButton process="txttest" id="article-ajouter" 
        update=":messages monpanel :articlesdata" 
        action="#{articlesMB.ajouter}" value="add" /> 
+0

雖然我有很多要處理的組件(只有一兩個不是進程),那麼我可以除了它而不是處理其他的 – simonTifo 2013-04-23 14:20:55

+1

你可以,例如:process =「@(:input:not (select))「(處理輸入組件但不選擇組件) – 2013-04-23 14:27:05

1

的原因,你的覆蓋面板只能使用一次,因爲你更新認爲overlayPanel連接到命令按鈕的面板。 這是在PF 5之後出現的overlayPanel中的一個錯誤。您可以在不訴諸進程屬性的情況下修復此問題,我認爲像這樣的解決方案會降低代碼的可讀性。

如果定義widgetVaroverlayPanel,說'carPanelWDG',並調用PF('carPanelWDG').loadContents()功能在onComplete事件的命令按鈕,一切只是工作。即使沒有評論解釋你爲什麼做這樣的事情,任何人都可以很容易地解釋這一點。