我对JSF不熟悉。我有关于数据表和事件处理的问题。这是我想要做的场景。 我有数据表,优先级,ID,地址,电话号码和支持bean是Person.I必须根据3个值Critical,Warning,Low对Priority列进行排序。我使用比较器的东西对优先级列进行了排序。它的工作正常。 现在,我面临的挑战是,一旦记录在托管bean中排序,我想用更新的排序结果填充数据表。记录是ArrayList。
<p:column>
<f:facet name="header" >
<h:commandLink action="#{personManagedBean.sortByPriority}">
Pririty
</h:commandLink>
</f:facet>
#{person.priority}
</p:column>
在托管bean中,
public class PersonManagedBean{
private ArrayList<Person> personList;
//getters and setters for personList.
public String sortByPriority(){
Collections.sort(personList, new PersonComparator());
return null;
}
}
执行Collections.sort行后,我想用已排序的personList记录填充数据表。
你能帮助我吗?
谢谢。
答案 0 :(得分:0)
虽然我认为您仍可以通过在<f:ajax render="@form"/>
<h:commandLink
来修改现有代码。
像这样
<h:commandLink action="#{personManagedBean.sortByPriority}">
<f:ajax render="@form"/>
Priority
</h:commandLink>
您最好使用p:column的sortBy
和sortFunction
它应该是这样的(请注意<h:outputText value="
的额外用法,这比简单文本更好)
<p:column sortBy="#{person.priority}" sortFunction="#{personManagedBean.sortByPriority}">
<f:facet name="header" >
<h:outputText value="Priority">
</f:facet>
<h:outputText value="#{person.priority}"/>
</p:column>
这就是sortByPriority
应该是(或多或少)的样子
public int sortByPriority(Object Obj1, Object Obj2) {
if (Obj1 != null && Obj2 != null) {
//turn the Objects into Strings or some other objects
return newObj1.compareTo(newObj2);
} else {
return 0;
}
}
看一下展示示例DataTable - Sorting