Sorting tapestry网格默认排序

Sorting tapestry网格默认排序,sorting,grid,tapestry,Sorting,Grid,Tapestry,我想指定tapestry网格的默认排序列 我知道我可以在服务器端对getter中的记录进行排序,但这似乎是不必要的工作,因为grid完全可以自己进行排序 因此,我的网格定义如下所示: getQueues返回如下对象的集合: 公共类队列{ 公共字符串getName(); 公共交通占用率(); } 我希望在默认情况下,按照“占用率”属性以子代顺序对网格进行排序 从Tapestry文档中我看到,该网格具有属性sortModel,这似乎是正确的选项。但是,我找不到很好的解释来解释设置它的正确值。您

我想指定tapestry网格的默认排序列

我知道我可以在服务器端对getter中的记录进行排序,但这似乎是不必要的工作,因为grid完全可以自己进行排序

因此,我的网格定义如下所示:


getQueues返回如下对象的集合:

公共类队列{
公共字符串getName();
公共交通占用率();
}
我希望在默认情况下,按照“占用率”属性以子代顺序对网格进行排序


从Tapestry文档中我看到,该网格具有属性sortModel,这似乎是正确的选项。但是,我找不到很好的解释来解释设置它的正确值。

您可能可以编写一个mixin来设置初始排序

@MixinAfter
public class DefaultSort {
    public enum Order { ASCENDING, DESCENDING };

    @Parameter(required=true, defaultPrefix="literal")
    private String sort;

    @Parameter(defaultPrefix="literal", value="literal:ascending")
    private Order order;

    @InjectContainer
    private Grid grid;

    @SetupRender
    void setupRender() {
        GridSortModel sortModel = grid.getSortModel();
        if (sortModel.getSortConstraints().isEmpty()) {
            sortModel.updateSort(sort);
            if (order == Order.DESCENDING) {
               // updateSort a second time for DESCENDING
               sortModel.updateSort(sort);
            }
        }
    }
}

<t:grid source="queues" inPlace="true" t:mixins="defaultsort" sort="occupancy" />
@MixinAfter
公共类DefaultSort{
公共枚举顺序{升序,降序};
@参数(必需=true,defaultPrefix=“literal”)
私有字符串排序;
@参数(defaultPrefix=“literal”,value=“literal:升序”)
私人秩序;
@注射容器
私有电网;
@设置渲染
void setupRender(){
GridSortModel sortModel=grid.getSortModel();
if(sortModel.getSortConstraints().isEmpty()){
sortModel.updateSort(排序);
如果(顺序==顺序递减){
//第二次更新启动以进行下降
sortModel.updateSort(排序);
}
}
}
}

很有趣。您的解决方案很有效,并教会了我更多关于tapestry的知识。但是,它只允许我按升序设置排序。以编程方式切换排序顺序时遇到问题。只需为同一属性再次调用GridSortModel.updateSort()。您可以查询SortConstraints以测试etci,可以看到排序图标已更新,但数据未排序。