有排序功能的ListAction的写法
程序员文章站
2022-03-03 12:31:36
...
@Override
public String execute() throws Exception {
// this.items = this.service.getDocumentItemsByCatalogId(catalogId);
//为如果没有点击排序图标而是通过跳转到列表页面时设置默认情况
if(property==null){
property="createDate";
way="desc";
}
this.items = this.service.getDocumentItemsByCatalogIdAndcondition(catalogId, property, way);
for (DocumentItem item : items) {
item.setIconType(this.service.getIconType(item.getType()));
}
return SUCCESS;
}
因为items的查找是通过传排序条件来得到的,而删除,更新等操作完成后一般也会转到这个页面,但如果让它们在传过来的过程中把这些条件的属性值也传过来就不太合适了,这时可以使用上面的方法,当这些属性值为空时就给它们设定相应的默认值就可以了,且可以同时只使用同一个方法来进行所有的列表操作,上面的property指排序的列名,如该查询方法的实现为:
@SuppressWarnings("unchecked")
public List<DocumentItem> getDocumentItemsByCatalogIdAndcondition(long catalogId, String property, String way) {
StringBuffer sb = new StringBuffer();
sb.append("from DocumentItem bean where bean.catalog.id=? order by bean.").append(property).append(" ").append(way);
List<DocumentItem> list =(List<DocumentItem>) getHibernateTemplate().find(sb.toString(),catalogId);
return list;
}
上面的方法中要注意hql语句不可以为 order by bean.?这样来传参数,所以这就是为什么使用StringBuffer来拼凑字符串了,注意StringBuffer的使用方法,得到一个实例后就可以直接append,而不是sb="ss".append(..)
上一篇: 反射get、set方法
下一篇: SQL语句怎么去掉字段不想要的字符?