单击标题部分中的commandLink后重新加载数据表

时间:2012-04-18 22:40:03

标签: jsf-2

我对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记录填充数据表。

你能帮助我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

虽然我认为您仍可以通过在<f:ajax render="@form"/>

中添加<h:commandLink来修改现有代码。 像这样

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

您最好使用p:column的sortBysortFunction

它应该是这样的(请注意<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