Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1188312
  • 博文数量: 89
  • 博客积分: 10546
  • 博客等级: 上将
  • 技术积分: 1510
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-16 01:24
文章分类

全部博文(89)

文章存档

2012年(7)

2011年(4)

2010年(5)

2009年(52)

2008年(21)

分类: Java

2009-03-23 18:33:33

一些框架提供了专有分页显示方法,如 Apache Wicket,Apache Tapestry5。Stripes 没有提供相应的组件,来处理分页显示问题。很多开源的第三方框架提供了解决方案,比较著名的有 , 。我在过去的项目用得最多的就是 。

使用 Display Tag 处理分页

首先,你需要从 下载最新的 Display TagDisplay Tag 依赖下面的文件。

  • commons-logging
  • commons-lang
  • commons-collections
  • commons-beanutils
  • log4j
  • itext(可选,用于导出 网站下载相应的包,并将相应的 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 显示页面。

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib uri="" prefix="display" %>
    <%@taglib uri="" prefix="stripes" %>
    "">




    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

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    "">




    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;
    }
    }
    }

    这段程序中模拟了数据库查询。

阅读(3646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~