0

我对 JSF 有点陌生。我对数据表和事件处理有疑问。这是我想要做的场景。我有优先级、id、地址和电话号码的数据表,支持 bean 是人员。我必须根据 3 个值关键、警告、低对优先级列进行排序。我已经使用 Comparator 的东西对优先级列进行了排序。它工作正常。现在,我面临的挑战是,一旦在托管 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 记录填充数据表。

你们能帮我吗?

谢谢你。

4

1 回答 1

0

尽管我认为您仍然可以通过添加<f:ajax render="@form"/>到您的<h:commandLink

像这样

 <h:commandLink action="#{personManagedBean.sortByPriority}">
     <f:ajax render="@form"/>
     Priority
  </h:commandLink>

你最好使用p:column的sortByandsortFunction

这就是它的样子(注意额外使用<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 - 排序

于 2012-04-19T05:05:13.977 回答