それで、私は今3日間試みてきました...最初に、私はprimefacesにタグp:columnsのバグがあることを発見しました。これは、sortFunctionがメソッドではなくプロパティを要求するためです。だから、私はこの解決策を見つけました: ここ それにもかかわらず、メソッドに到達しても、パラメーターを渡すことができるかどうかわからないため、どの列をソートするように求めているのかわかりません。誰でも助けることができますか?ここではprimefaces 5.0を使用しています。
ここに私のデータテーブルがあります:
<p:dataTable value="#{categoryBean.categories}" var="category">
<p:column sortBy="#{category.name}">
<f:facet name="header">
<h:outputText value="Category"></h:outputText>
</f:facet>
<h:outputText value="#{category.name}"></h:outputText>
</p:column>
<p:columns value="#{categoryBean.columns}" var="column" columnIndexVar="i" sortBy="#{category}" sortFunction="#{categoryBean.customOrder}">
<f:facet name="header">
<h:outputText value="#{column.header}">
</h:outputText>
</f:facet>
<h:outputText value="#{category[column.property][i].sumGrade/category[column.property][i].countGrade}"></h:outputText>
</p:columns>
</p:dataTable>
そして、ここに私の方法があります:
public MethodExpression getCustomOrder() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createMethodExpression(context.getELContext(),
"#{categoryBean.customSort}", Integer.class,
new Class[] { Object.class, Object.class });
}
public int customSort(Object val1, Object val2) {
System.out.println("mySort" + val1 + "/" + val2);
return 0;
}
したがって、オブジェクトはメソッドに到達できますが、パラメーターなどを渡す方法を知る必要があるため、参照している列を知ることができます。君たちありがとう。