Sorting Primefaces 5动态数据表预排序
我正试图用Primefaces 5.0构建一个完全动态的数据表 我为eachs列提供了一个Config对象,我希望DT从一开始就按其中一个进行排序 这是我的DT:Sorting Primefaces 5动态数据表预排序,sorting,jsf,primefaces,datatables,Sorting,Jsf,Primefaces,Datatables,我正试图用Primefaces 5.0构建一个完全动态的数据表 我为eachs列提供了一个Config对象,我希望DT从一开始就按其中一个进行排序 这是我的DT: <p:dataTable id="ticketTable" widgetVar="ticketTable" value="#{ticketBean.ticketDataModell}" var="ticket"
<p:dataTable id="ticketTable"
widgetVar="ticketTable"
value="#{ticketBean.ticketDataModell}"
var="ticket"
lazy="true"
paginator="true"
rows="20"
sortBy="#{dataPortletConfigBean.sortByKey}"
>
肮脏的东西是一根绳子。这是我要排序的变量的名称。
所以我想用sortBy=“{bean.GiveMeAKey}”
替换类似sortBy=“key”
但它不起作用。
我发现:无法解析属性:[…]的sortByKey
我怎样才能让它工作?
谢谢我测试了你的要求,效果很好 检查dataPortletConfigBean中的属性sortByKey是否返回如下所示的字符串:
public String getSortByKey() {
return "ticket.number";
}
还要确保目标列定义了sortBy属性:
<p:column sortBy="#{ticket.number}" headerText="Number">
#{ticket.number}
</p:column>
#{票证号码}
我现在可以用了
第一:问题。
我想给数据表提供一个默认排序(加载时)的可能性。
这就是
中的排序标记所做或应该做的
只要在DT标记中写入排序字段,例如sortBy=“name”
它就可以工作。
但是当您传递一个值表达式时,例如sortBy=“#{bean.giveMeSomeKey}”
。他只是把“#{”,所有的东西都切掉“.”,最后一个“}”,然后尝试用结果字符串的名称按字段排序。在本例中为“giveMeSomeKey”
这使得不可能使用动态值进行默认排序。(至少在PF 5.0中)
第二:决心。
我签出了PF 5.0-Sources并修改了DataTableTemplate文件。(它是一个模板,在构建PF时填充。稍后将编译到DataTable类中)
在那里,我修改了方法protectedstringresolvesortfield()
之前:
protected String resolveSortField() {
UIColumn column = this.getSortColumn();
String sortField = null;
ValueExpression tableSortByVE = this.getValueExpression("sortBy");
Object tableSortByProperty = this.getSortBy();
if(column == null) {
sortField = (tableSortByVE == null)
? (String) tableSortByProperty
: resolveStaticField(tableSortByVE);
}
之后:
protected String resolveSortField() {
UIColumn column = this.getSortColumn();
String sortField = null;
ValueExpression tableSortByVE = this.getValueExpression("sortBy");
Object tableSortByProperty = this.getSortBy();
if(column == null) {
sortField = (tableSortByVE != null)
? tableSortByVE.getExpressionString().contains("[")
? resolveDynamicField(tableSortByVE)
: resolveStaticField(tableSortByVE)
: (String) tableSortByProperty;
}
在构建并将其纳入我的项目后,它成功了
现在我可以告诉我的DT:
我不记得这在PF 5.0中是否可用,但现在在5.1中,您可以使用数据表中的sortField属性。这正是为了这个目的而实施的:
从Primefaces文档:
sortField:要传递延迟加载方法的字段的名称
分类。如果未指定,则使用sortBy表达式
用于提取名称
之后,必须使用“字段”属性为每列定义一个类似的值。如果列不是动态的,只是排序,那么field属性的值将与列本身的值相同
代码片段:
<p:dataTable var="repo" value="#{repoStrategy.flaggedRepos}" sortOrder="${repoStrategy.sortOrder}" sortField="${repoStrategy.sortBy}"
style="width: 100%" paginator="true" rows="10" rowIndexVar="rowIndex" >
<p:column headerText="Name" sortBy="#{repo.name}" field="repo.name">
<a href="#{repo.url}" target="_blank">#{repo.name}</a>
</p:column>
在一列中,它当然起作用。但是我希望它在DT头[…]
中作为默认排序。我现在发现了问题。DT头不能解析ValueExpressions,所以我修改了PF源代码,现在它可以工作了。是的,我就是这样测试的,在datatable定义的默认排序上。但是在PF 5.0中它不能工作。至少我看到的源代码不是这样。