1.写一个实现PaginatedList的类PaginatedListHelper
- public class PaginatedListHelper
- implements PaginatedList {
- private int fullListSize; // 总记录数
- private List list; // 每页列表
- private int objectsPerPage;// 每页记录数 page size
- private int pageNumber = 1; // 当前页码
- private String searchId;
- private String sortCriterion;
- private SortOrderEnum sortDirection;
- public int getFullListSize() {
- return fullListSize;
- }
- public void setFullListSize(int fullListSize) {
- this.fullListSize = fullListSize;
- }
- public List getList() {
- return list;
- }
- public void setList(List list) {
- this.list = list;
- }
- public int getObjectsPerPage() {
- return objectsPerPage;
- }
- public void setObjectsPerPage(int objectsPerPage) {
- this.objectsPerPage = objectsPerPage;
- }
- public int getPageNumber() {
- return pageNumber;
- }
- public void setPageNumber(int pageNumber) {
- this.pageNumber = pageNumber;
- }
- public String getSearchId() {
- return searchId;
- }
- public void setSearchId(String searchId) {
- this.searchId = searchId;
- }
- public String getSortCriterion() {
- return sortCriterion;
- }
- public void setSortCriterion(String sortCriterion) {
- this.sortCriterion = sortCriterion;
- }
- public SortOrderEnum getSortDirection() {
- return sortDirection;
- }
- public void setSortDirection(SortOrderEnum sortDirection) {
- this.sortDirection = sortDirection;
- }
- }
2.编写action
- .....................
- // 页码
- int pageNumber;
- if (request.getParameter("page") != null
- && !"".equals(request.getParameter("page"))) {
- pageNumber = Integer.parseInt(request.getParameter("page"));
- } else {
- pageNumber = 1;
- }
- PaginatedListHelper ph = new PaginatedListHelper();
- try {
- //分页数据查询
- List dataList = dao.msgList(conn, pageNumber, para);
- //记录总条数
- int totalNum = dao.totalcount(conn, para);
- ph.setFullListSize(totalNum);
- ph.setList(dataList);
- ph.setPageNumber(pageNumber);
- ph.setObjectsPerPage(20);
- //传递给displaytag table name="requestScope.msgList"的数据
- request.setAttribute("msgList", ph);
- if (conn != null)
- conn.close();
- } catch (Exception e) {
- e.printStackTrace();
- Log.error(MsgAction.class, e.getCause());
- }
3.问题:
分页的url可能会受到struts action的影响,而在每一次点击翻页链接的时候会再调用一次执行前一个动作的struts action;
在网上找了这方面的资料,但是仍然没有找到解决办法,也许是displaytag所有解决的bug吧;
我的解决方法是,如果我的table展示页面对应的actoin是list.do,而在页面上有一个新增按钮,对应的action是new,如果新建成功则页面导到list,这个时候翻页的url就是new的了,如果翻页的话,就会再一次执行new方法,以致往DB中又插入一条记录;我的解决办法是,强制的修改这个action;例如不返回到list页面,而是留有一个返回按钮触发js,window.location.href="/list.do";这样就到了list页面,displaytag的翻页url也是list.do了