我正在使用display tag和spring mvc。 基本上,我有一个像这样的简单表。请注意使用外部。
<display:table id="tableId" name="data" sort="external" defaultsort="1" sort="external">
<display:column property="id" title="ID" sortable="true" sortName="id" />
<display:column property="firstName" sortable="true" sortName="firstName" title="First Name" />
<display:column property="lastName" sortable="true" sortName="lastName" title="Last Name" />
<display:column property="address" sortable="true" sortName="address" title="Email Address"/>
</display:table>
在控制器端,我得到排序列索引和排序顺序。
String c = request.getAttribute(new ParamEncoder("tableId").encodeParameterName(TableTagParameters.PARAMETER_SORT));
获取订单(ASC / DESC):
String order = request.getAttribute(new ParamEncoder("tableId").encodeParameterName(TableTagParameters.PARAMETER_ORDER)));
这一切都很好。对于最后一步,我使用自定义比较器对列表进行排序,并将其放回到将数据映射到表中的“data”属性中(参见display tag“name”属性)。
public void populateModel(Model model, HttpRequest request){
String c = request.getAttribute(new ParamEncoder("tableId").encodeParameterName(TableTagParameters.PARAMETER_SORT));
// here the comparator is computed with column and order value eg
Comparator comp = new DefaultComparator();
if(c == 1){
comp = new NumericComparator();
}
List<Employe> list = Collection.sort(dao.getEmployee(), comp );
model.addAttribute("data", list);
// here the list is sorted properly
return "mypage";
}
不幸的是,最终jsp中的显示并不关心列表中的顺序。看起来有些东西覆盖了默认和字母数字排序器...所以即使我使用我的NumericComparator,列仍然是错误排序的,我认为“list”对象已经被显示之前的librairie排序了。
总结:
获取显示标记索引:确定
对列表进行排序并将其放回jsp: ok (列表根据控制器中的显示标记参数排序)
使用显示标记显示jsp一侧的排序列表: KO (库不关心列表顺序,使用默认排序对其进行排序)
在没有显示标记的情况下显示jsp端的排序列表:确定
有任何解释,有什么不对或丢失吗?