- 论坛徽章:
- 0
|
一些框架提供了专有分页显示方法,如 Apache Wicket,Apache Tapestry5。Stripes 没有提供相应的组件,来处理分页显示问题。很多开源的第三方框架提供了解决方案,比较著名的有
Display Tag
,
JMesa
。我在过去的项目用得最多的就是
Display Tag
。
使用 Display Tag 处理分页
首先,你需要从
Display Tag
下载最新的 Display Tag,Display Tag 依赖下面的文件。
commons-loggingcommons-langcommons-collectionscommons-beanutilslog4jitext(可选,用于导出 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 |
|