2012-03-28 5 views
0

Hallo ich benutze primefaces Version 3.2 Das Ui-Layout, das ich verwende, ist Tabview, darin habe ich Akkordeon-Panel, und in jedem Tab des Akkordeons, ich habe zwei Formen.Primefaces, activeindex Listener nicht in mehreren Tabs aufrufen

Genau wie TabView> tab> accordionpanel> tab> form1 und

TabView> tab> accordionpanel> tab> form2 und so weiter ...

Nun, das Problem ist, dass die aktive Index Aktion wird im obigen Szenario nicht aufgerufen. Allerdings, wenn ich eines der From aus dem Akkordeon Panel Tab entferne, wird es aufgerufen und funktioniert gut.

Das ist mein xhtml TabView Code

<p:tabView id="tabView" activeIndex="#{profileInfoManagedBean.myCurrentTab}" > 
     <p:ajax event="tabChange" listener="#{profileInfoManagedBean.tabIsChanged}" /> 

     <p:tab id="locationInfoTab" title="Location Info"> 

      <p:accordionPanel id="aPanel"> 

       <p:tab id="tab1" title="Country"> 
        <h:form id="form1"> 
         <p:growl id="growl" life="5000" /> 

         <p:messages id="messages" /> 

         <h:panelGrid columns="3" cellpadding="5" cellspacing="5"> 

          <p:column> 
           <h:outputLabel for="country" value="Country: "></h:outputLabel> 
          </p:column> 
          <p:column> 
           <p:inputText id="country" value="#{profileInfoManagedBean.country.country}" required="true" label="City"> 

            <f:validateLength minimum="5" maximum="20" /> 
            <p:ajax event="blur" update="msg1"></p:ajax> 
           </p:inputText> 
          </p:column> 
          <p:column> 
           <p:message id="msg1" for="country" display="icon"></p:message> 
          </p:column> 

         </h:panelGrid> 
         <p:commandButton type="submit" action="#{profileInfoManagedBean.addCountry}" value="Save" ajax="true" ></p:commandButton> 

        </h:form> 

Antwort

0

Sind Sie auf der locationInfoTab oder auf dem Akkordeon tab1 aktiven Index zu wollen?

I getestet und Ihren Code geändert ein wenig, um den aktiven Index auf beide zu bekommen:

<h:form id="tabViewForm"> 

<p:tabView id="tabView" activeIndex="#{profileInfoManagedBean.myCurrentTab}" > 
    <p:ajax event="tabChange" listener="#{profileInfoManagedBean.tabIsChanged}" update=":tabViewForm"/> 
    <p:tab id="locationInfoTab" title="Location Info"> 
     <p:accordionPanel id="aPanel" activeIndex="#{profileInfoManagedBean.myCurrentAccordionTab}"> 
     <p:ajax event="tabChange" listener="#{profileInfoManagedBean.tabIsChanged}" update=":tabViewForm" /> 
     <p:tab id="tab1" title="Country"> 
      <h:form id="form1"> 
. 
. 
. 
<p:inputText id="country" value="#{profileInfoManagedBean.country.name}" required="true" label="Country"> 
    <f:validateLength minimum="5" maximum="20" /> 
    <p:ajax event="blur" update="country msg1 growl messages"></p:ajax> 
</p:inputText> 
. 
. 
. 
    </p:accordionPanel> 
</p:tab> 
<p:tab id="tab2" title="Tab Information"> 
</p:tab> 
</p:tabView> 
</h:form> 

I Registerkarte Änderungsereignis hinzugefügt, um die tabViewForm auf dem Akkordeon-Panel, aktualisieren, wenn Registerkarten, aktualisiert Nachrichten ändern, wenn die Eingangsänderungen und fügte eine weitere Registerkarte zum Testen hinzu.

Ich denke, das ursprüngliche Problem liegt daran, dass der Validator im Eingabefeld einen Fehler verursacht, aber die Ansicht wurde nicht aktualisiert, um die Nachricht anzuzeigen.

Durch Aktualisieren des Formulars auf einer Registerkarte Änderung wird die Validator-Fehlermeldung angezeigt.

Ich hoffe, das hilft Ihnen.