Primefaces, прослушиватель activeindex не вызывает несколько вкладок

Привет, я использую версию Primefaces 3.2. Макет пользовательского интерфейса, который я использую, представляет собой вкладку, внутри нее у меня есть панель аккордеона, а внутри каждой вкладки аккордеона у меня есть две формы.

Точно так же, как вкладка > вкладка > панель аккордеона > вкладка > форма1 и

вкладка > вкладка > панель аккордеона > вкладка > форма2 и так далее...

Теперь проблема в том, что действие активного индекса не вызывается в приведенном выше сценарии. Однако, когда я удаляю один из файлов с вкладки панели аккордеона, он вызывается и работает нормально.

Это мой код вкладки xhtml

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

person Mudassir Shahzad    schedule 28.03.2012    source источник


Ответы (1)


Вам нужен активный индекс на вкладке locationInfoTab или на вкладке аккордеона1?

Я протестировал и немного изменил ваш код, чтобы получить активный индекс для обоих:

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

Я добавил событие смены вкладки на панель аккордеона, обновил tabViewForm при изменении вкладок, обновил сообщения при изменении ввода и добавил еще одну вкладку для тестирования.

Я думаю, что исходная проблема связана с тем, что валидатор в поле ввода вызывает ошибку, но представление не обновлялось, чтобы показать вам сообщение.

При обновлении формы при изменении вкладки сообщение об ошибке валидатора становится ясным.

Я надеюсь, это поможет вам.

person wwhite    schedule 01.05.2012