免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1834 | 回复: 0
打印 上一主题 下一主题

Stripes tips(11)-使用 Display Tag 进行分页 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-23 18:33 |只看该作者 |倒序浏览

一些框架提供了专有分页显示方法,如 Apache Wicket,Apache Tapestry5。Stripes 没有提供相应的组件,来处理分页显示问题。很多开源的第三方框架提供了解决方案,比较著名的有
Display Tag

JMesa
。我在过去的项目用得最多的就是
Display Tag

使用 Display Tag 处理分页
首先,你需要从
Display Tag
下载最新的 Display Tag,Display Tag 依赖下面的文件。
  • commons-logging
  • commons-lang
  • commons-collections
  • commons-beanutils
  • log4j
  • itext(可选,用于导出 PDF 和 RTF )
    你可以从
    Apache Commons
    网站下载相应的包,并将相应的 jar 文件加入到项目的依赖库中。另外,Excel 导出需要添加displaytag-export-poi jar文件,它依赖pio jar,它是Apache Jakarta 下的一个子项目。这里不演示导出 PDF 和 Excel 文件。
    创建一个 Users 类,提供分页显示中的数据源。这里 Users是一个伪数据库访问类,后面会替换成真实的数据库环境。
    package tutorial.dao;
    import tutorial.model.User;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    /**
    *
    * @author hantsy
    */
    public class Users {
        static List users = new ArrayList();
        static {
            users.add(new User(1L, "Harry", "Potter"));
            users.add(new User(2L, "Bill", "Gates"));
            users.add(new User(3L, "Steven", "Jobs"));
            users.add(new User(4L, "Bob", "Lee"));
            users.add(new User(5L, "test", "test"));
            users.add(new User(6L, "test2", "test2"));
            users.add(new User(7L, "test3", "test3"));
            users.add(new User(8L, "test4", "test4"));
            users.add(new User(9L, "test5", "test5"));
            users.add(new User(10L, "test6", "test6"));
            users.add(new User(11L, "test7", "test7"));
            users.add(new User(12L, "test8", "test8"));
        }
        public static List getUserList() {
            return users;
        }
        public static void deleteUser(Long id) {
            for (Iterator iterator =users.iterator(); iterator.hasNext();) {
                if (((User) iterator.next()).getId().longValue() == id) {
                    iterator.remove();
                }
            }
        }
        public static List subList(int start, int len) {
            if (start + len > users.size()) {
                return users.subList(start, users.size());
            }
            return users.subList(start, start + len);
        }
    }
                           
                           
    创建一个 ActionBean 显示用户列表。
    package tutorial.action;
    import java.util.List;
    import net.sourceforge.stripes.action.DefaultHandler;
    import net.sourceforge.stripes.action.ForwardResolution;
    import net.sourceforge.stripes.action.Resolution;
    import tutorial.dao.Users;
    import tutorial.model.User;
    /**
    *
    * @author hantsy
    */
    public class ListUserActionBean extends BaseActionBean {
        private List users;
        public List getUsers() {
            return users;
        }
        public void setUsers(List users) {
            this.users = users;
        }
       
        @DefaultHandler
        public Resolution listUsers(){
            users=Users.getUserList();
            return new ForwardResolution("/userList.jsp");
        }
    }
                           
                           
    创建 JSP 显示页面。
       
            
            User List Page
       
       
             User List Page!
            
                
                
                
                
                   
                Edit
                
             
            
                Delete
                
            
                
            
       
                           
                           
    创建一个简单的 DeleteUserActionBean,用于删除用户。
    package tutorial.action;
    import net.sourceforge.stripes.action.RedirectResolution;
    import net.sourceforge.stripes.action.Resolution;
    import tutorial.dao.Users;
    /**
    *
    * @author hantsy
    */
    public class DeleteUserActionBean extends BaseActionBean {
        private Long id;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public Resolution delete() {
            Users.deleteUser(id);
            return new RedirectResolution(ListUserActionBean.class);
        }
    }
                           
                           
    创建一个简单的 EditUserActionBean。
    package tutorial.action;
    import net.sourceforge.stripes.action.ForwardResolution;
    import net.sourceforge.stripes.action.Resolution;
    /**
    *
    * @author hantsy
    */
    public class EditUserActionBean extends BaseActionBean{
        public Resolution edit(){
            return  new ForwardResolution("/editUser.jsp");
        }
    }                       
                           
    创建编辑页面 editUser.jsp。
       
            
            JSP Page
       
       
            Edit User!
       
                           
                           
    现在你已经可以体验分页程序。但是,我们每次都是查询了全部用户,当数据量很大时,存在性能问题。Display Tag 1.1 起也提供了动态查询,每次只需要取出当前页显示的记录即可。下面对这个程序加以改造。
    Display Tag 提供了两种方法,一种是实现 org.displaytag.pagination.PaginatedList。另外一种方法,在Display Tag 标签中设置必要的属性参数。这种使用前者实现,修改 JSP 页面。
                
                
                
                
                   
                Edit
                
             
            
                Delete
                
            
                
                                   
                           
    修改ListUserActionBean。
    public class ListUserActionBean extends BaseActionBean {
        private ResultList users;
        private String sort = "id";
        private String dir = "asc";
        private int page = 1;
        public String getDir() {
            return dir;
        }
        public void setDir(String dir) {
            this.dir = dir;
        }
        public int getPage() {
            return page;
        }
        public void setPage(int page) {
            this.page = page;
        }
        public String getSort() {
            return sort;
        }
        public void setSort(String sort) {
            this.sort = sort;
        }
        public ResultList getUsers() {
            return users;
        }
        public void setUsers(ResultList users) {
            this.users = users;
        }
        @DefaultHandler
        public Resolution listUsers() {
            users = new ResultList();
            return new ForwardResolution("/userList.jsp");
        }
        class FirstnameComparator implements Comparator {
            public int compare(User o1, User o2) {
                return o1.getFirstname().compareTo(o2.getFirstname());
            }
        }
        class LastnameComparator implements Comparator {
            public int compare(User o1, User o2) {
                return o1.getLastname().compareTo(o2.getLastname());
            }
        }
        class ResultList implements PaginatedList {
            public List getList() {
                List list = Users.subList((getPageNumber() - 1) * getObjectsPerPage(), getObjectsPerPage());
                if (getSortCriterion().equals("firstname")) {
                    Collections.sort(list, new FirstnameComparator());
                } else if(getSortCriterion().equals("lastname")){
                    Collections.sort(list, new LastnameComparator());
                }
                if (getSortDirection().equals(SortOrderEnum.DESCENDING)) {
                    Collections.reverse(list);
                }
                return list;
            }
            public int getPageNumber() {
                return page;
            }
            public int getObjectsPerPage() {
                return 5;
            }
            public int getFullListSize() {
                return Users.getUserList().size();
            }
            public String getSortCriterion() {
                return sort;
            }
            public SortOrderEnum getSortDirection() {
                if (dir.equals("desc")) {
                    return SortOrderEnum.DESCENDING;
                }
                return SortOrderEnum.ASCENDING;
            }
            public String getSearchId() {
                return null;
            }
        }
    }
                           
                           
    这段程序中模拟了数据库查询。
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1096/showart_1876516.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP