Primefaces Datatable в Tabview - начальная сортировка на второй вкладке не работает

У меня есть tabView, где каждая вкладка содержит данные. Я так настроил

<p:tabView id="tabView" styleClass="manage-tab-view" prependId="false" 
        activeIndex="#{managementTabBean.activeIndex}" dynamic="true" cache="false">
<p:tab id="users" title="#{msg['TeamManagement.Tabs.Users']}" >
            <ui:include src="tab1.xhtml" />
        </p:tab>
<p:tab id="athletes" title="#{msg['TeamManagement.Tabs.Athletes']}">
            <ui:include src="tab2.xhtml" />
</p:tab>
</p:tabView>

На каждой вкладке я пытаюсь показать данные. Прямо сейчас у меня это настроено так:

Tab1:

<h:form id="userProfileViewForm" prependId="false">
    <p:dataTable var="userProfile" value="#{userProfileListBean.objects}"
        id="userProfilesTable" sortBy = "#{userProfile.lastName}" sortFunction = "#{userProfileListBean.sortUserLastName}" sortOrder = "ascending" lazy="true">

        <p:column sortBy="#{userProfile.lastName}" sortFunction = "#{userProfileListBean.sortUserLastName}" id="userName">
p:commandLink>
             <p:commandLink rendered="#{!appContextBean.isCWContext()}"
                    onclick="window.location.href='userBS.xhtml?id=#{userProfile.id}'">
                    <div class="clickable-cell">
                        <h:outputText
                        value="#{userProfile.firstName} #{userProfile.lastName}" />
                    </div>
            </p:commandLink>
        </p:column>

...more columns...

Tab2: Похожие таблицы данных

<p:dataTable var="athlete" value="#{athleteListBean.objects}"
        tableStyle="width:auto" sortBy="#{athlete.getDisplayName()}" sortFunction = "#{athleteListBean.sortAthleteDisplayName}" id="athletesTable" 
        sortOrder="#{athleteListBean.getListSortOrderDesc()}" lazy="true" paginator="true" rows="15" paginatorPosition="bottom"
            paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">

        <p:column sortBy="#{athlete.getDisplayName()}" sortFunction = "#{athleteListBean.sortAthleteDisplayName}" id="athleteColumn">
<h:outputText styleClass="athlete-listing athlete-name" value="#{athlete.firstInitial} #{athlete.lastName}" />
</p:column>

Как видите, у меня есть настраиваемая функция начальной сортировки для обеих таблиц данных.

По какой-то причине вызывается первая функция сортировки по вкладкам, а вторая - нет. После того, как я поменял местами вкладки в tabview, вызывается функция сортировки tab2, а tab1 - нет.

Обычно функция начальной сортировки вызывается только для таблицы данных первой вкладки в зависимости от порядка вкладок в представлении вкладок. Кто-нибудь может сказать мне, почему это происходит?

Спасибо за помощь.


person Matt Kagan    schedule 22.05.2013    source источник
comment
Возможно, это потому, что у вас только один тег h: form. Попробуйте использовать вставку каждой таблицы в один тег h: form. С уважением,   -  person Rodmar Conde    schedule 23.05.2013
comment
Я не вставлял код над второй таблицей данных, потому что не понимал, что это актуально. Но каждая из моих таблиц данных находится в собственном теге формы. Столы настроены точно так же.   -  person Matt Kagan    schedule 23.05.2013
comment
У меня такая же проблема, вы ее решили?   -  person yetAnotherSE    schedule 11.10.2013


Ответы (2)


У меня была аналогичная проблема, в моем случае на второй вкладке был p: dataTable с p: columnToggler, и нажатие на кнопку, чтобы скрыть или отобразить столбцы, отображаются черным цветом и не могут удалить столбцы.

Решение, которое я нашел, заключалось в том, чтобы добавить событие tabChange в p: ajax внутри p: TabView.

Таким образом проблема была решена, и я уже исправно работаю над p: columnToggler.

Возможно, вы обслуживаете проблему с порядком p: dataTable.

Здесь я помещаю свой код:

<p:tabView effect="fade" effectDuration="fast"  prependId="false">
    <p:ajax event="tabChange" update="@this"/>
    <p:tab title="#{text['liquidacionForm.tabDatosLiq']}">
       <ui:include src="/datosLiquidacion.xhtml"></ui:include>
     </p:tab>
    <p:tab title="#{text['liquidacionForm.tabEstanciasLiq']}">
       <ui:include src="/estanciasLiquidadas.xhtml"></ui:include>
   </p:tab>
</p:tabView>
person nokiajavi    schedule 29.07.2014

Я думаю, что из-за полного имени метода, указанного в части EL (Expression Language), ваша вторая сортировка вкладок вообще не вызывается.

Итак, вам нужно удалить фактическое имя метода с исключением части получателя, т.е.

вместо {athleteListBean.getListSortOrderDesc() используйте {athleteListBean.listSortOrderDesc}

Используйте приведенный ниже код для второй вкладки.

 <p:dataTable var="athlete" value="#{athleteListBean.objects}"
    tableStyle="width:auto" sortBy="#{athlete.displayName}" sortFunction = "#{athleteListBean.sortAthleteDisplayName}" id="athletesTable" 
    sortOrder="#{athleteListBean.listSortOrderDesc}" lazy="true" paginator="true" rows="15" paginatorPosition="bottom"
        paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">

    <p:column sortBy="#{athlete.displayName}" sortFunction = "#{athleteListBean.sortAthleteDisplayName}" id="athleteColumn">

person Nirdesh Sharma    schedule 08.01.2014