我有一个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:类似的DataTable
<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不会。
基本上初始排序功能仅在第一个选项卡的数据表上调用,具体取决于选项卡视图中选项卡的顺序。谁能告诉我为什么会这样?
感谢您的帮助。
答案 0 :(得分:1)
我有类似的问题,在我的情况下,在第二个标签上有一个p:dataTable和p:columnToggler,点击按钮隐藏或显示列以黑色显示,无法删除列。
我找到的解决方案是在p:ajax里面添加事件“tabChange”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>
答案 1 :(得分:0)
我认为,由于EL(表达式语言)部分提供的完整方法名称,您的第二个标签排序根本不会被调用。
因此,您需要删除实际的方法名称,同时执行getter部分,即
而不是{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">