displaytag按需分页的包装及实例(二)

2014-11-24 11:01:11 · 作者: · 浏览: 1
if (request.getParameter("pageSize") != null
&& !"".equals(request.getParameter("pageSize"))) {
pageSize = Integer.parseInt(request.getParameter("pageSize"));
} else {
pageSize = 20;
}
if (request.getParameter("page") != null
&& !"".equals(request.getParameter("page"))) {
page = Integer.parseInt(request.getParameter("page"));
} else {
page = 1;
}
int fromIndex = (page - 1) * pageSize;
int toIndex = fromIndex + pageSize;
int fullListSize = getFullListSize();
List pageDatas = getPageDatas(fromIndex, toIndex);
SimplePaginatedList paginatedList = new SimplePaginatedList();
paginatedList.setPageNumber(page);
if (pageDatas != null && pageDatas.size() > 0 && fullListSize > 0) {
paginatedList.setFullListSize(fullListSize);
paginatedList.setObjectsPerPage(pageSize);
paginatedList.setList(pageDatas);
} else {
paginatedList.setFullListSize(0);
paginatedList.setList(null);
}
request.setAttribute("pagedatas", paginatedList);
}
public PaginatedWrapper setPageSize(int pageSize) {
this.pageSize = pageSize;
return this;
}
protected abstract List getPageDatas(int fromIndex, int toIndex);
protected abstract int getFullListSize();
}
PaginatedWrapper是一个抽象类,有以下几个特性:
1) 支持泛型,可以根据模块的要求传入相应的bean对象。
2) paginated()方法内聚和包装了displaytag的参数需求,并进行了一些共有的初始化。同时也提供了pagesize大小的设置,默认是20,注意setPageSize放回的this,此处使用了反回自身的方式,便于连续的属性设置。
3) 抽象方法 protected abstract List getPageDatas(int fromIndex, int toIndex) 和 protected abstract int getFullListSize() 对每个模块,具有不同性,因此通过接口方法的方式留给具体的模块去实现。实现一般放在Dao层,然后通过前台Controller(Spring),或者Action(Struts),或者Jsp去调用。
3,使用1,2步骤创建好的两个包装类,应用到具体的项目。下面以SSH2为例,也可以应用到其它的框架结构,因为SSH的框架比较通用,以下只给出关键代码,具体的实现应该是简单的。
3.1, Action类
[java]
@Actions( {
@Action(value = "/queryIncidental", results = {
@Result(location = "center/pos/incidental_query_result. jsp", name = "success"),
})
})
})
public String queryIncidental(){
new PaginatedWrapper(){
@Override
protected List getPageDatas(int fromIndex, int toIndex) {
return service.initQueryIncidentalByPage(mv,getCompid(), fromIndex, toIndex);
}
@Override
protected int getFullListSize() {
return service.findFullSizeByCustAndDate(mv,getCompid());
}
}.paginated(request);
return SUCCESS;
}
以上Action的关键点在于实现getPageDatas()方法和getFullListSize()方法,service是业务逻辑成对象,如果用了Spring,可以通过@Autowired自动注入。
3.2) Service类
[java]
public List initQueryIncidentalByPage(IncidentalMV mv, int compid, int fromIndex, int toIndex) {
St