gpt4 book ai didi

带有列切换器的 Primefaces 数据表与列上的排序功能冲突

转载 作者:行者123 更新时间:2023-12-04 22:43:07 24 4
gpt4 key购买 nike

我有一个包含列切换器的数据表。当我取消选中一列并对字段进行排序时,表格是错误的。未选中字段的标题弹出,所有数据向左移动,留下 1 列空白。

我的 table.xhtml 文件:

<h:form>    
<p:dataTable id="registrations" var="registration" tableStyle="table-layout: auto;" widgetVar="registrationsTable"
value="#{overviewBean.listOfRegistrations}"
filteredValue="#{overviewBean.filteredListOfRegistrations}" emptyMessage="No registrations found with given criteria" >
<f:facet name="header">
<p:outputPanel style="text-align:left;">
<h:outputText value="Search all fields: " />
<p:inputText id="globalFilter" onkeyup="PF('registrationsTable').filter()" style="width:150px;" placeholder="Enter keyword"/>

<p:commandButton id="toggler" type="button" value="Columns" icon="ui-icon-calculator" style="float:right;"/>
<p:columnToggler datasource="registrations" trigger="toggler" >
</p:columnToggler>
</p:outputPanel>
</f:facet>


<p:column headerText="Active" visible="false">
<h:outputText value="Y" />
</p:column>

<p:column headerText="Firstname" filterBy="#{registration.firstname}" filterStyle="display:none" sortBy="#{registration.firstname}">
<h:outputText value="#{registration.firstname}" />
</p:column>

<p:column headerText="Lastname" filterBy="#{registration.lastname}" filterStyle="display:none" sortBy="#{registration.lastname}">
<h:outputText value="#{registration.lastname}" />
</p:column>

</p:dataTable>
</h:form>

最佳答案

我在这篇博文中找到了答案:
http://blog.primefaces.org/?p=3341

解决方案是保留 Visibility支持 bean 中所有列的状态。

切换器必须触发支持 bean 中的 onToggle 函数:

<p:columnToggler datasource="registrations" trigger="toggler" >
<p:ajax event="toggle" listener="#{overviewBean.onToggle}" />
</p:columnToggler>

每列必须由支持 bean 中的 bool 列表设置:
<p:column headerText="Entry date" sortBy="#{registration.entryDate}" visible="#{overviewBean.list[0]}">
<h:outputText value="#{registration.entryDate}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>

在支持 bean 中,您必须有一个代表每个字段可见性的 bool 值列表:
private List<Boolean> list;

public List<Boolean> getList() {
return list;
}

public void setList(List<Boolean> list) {
this.list = list;
}

public void onToggle(ToggleEvent e) {
list.set((Integer) e.getData(), e.getVisibility() == Visibility.VISIBLE);
}

@PostConstruct方法你必须初始化这个bean列表:
list = Arrays.asList(false, true, true);

关于带有列切换器的 Primefaces 数据表与列上的排序功能冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39717800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com