TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
许多进行javaEE开发的程序爱好者,就知道在JSP页面直接实现分页功能是不方便的,尤其是要使用request对象传递currentPage值更是达不到应有的效果。本人通过实践终于实现了使用java自定义标签实现分页功能,并且可以通过建立不同相对应的类来同时实现多种分页。我现在把它总结出来,一则以后可以使用,二则也可以给大家提供参考。欢迎转载,也欢迎跟帖发表更多的实现方法。
以下通过实现用户遍历的实例来讲述
步骤:
1,建立自定标签类
在src路径下,建立包com.sg.common,在此包下建立类:UserEvalPage.java继承javax.Servlet.jsp.tagext.TagSupport类,重写方法public int doEndTag(),返回值必须为EVAL_PAGE,方法的实现如下:
//从容器中获取输出对象,pageContext对象为父类静态属性
JspWriter out = pageContext.getOut();
//获取session对象
HttpSession session = pageContext.getSession();
//定义分页的类型
String type = "User";
//定义并赋值给action
String action = "CommonShowPageServlet";
//定义总页数
int total = 0;
//定义当前页数为1
int currentPage = 1;
//定义当前页为null
String curPage = null;
//从session中取出当前页
if(session.getAttribute(type+"CurrentPage") != null){
curPage = session.getAttribute(type+"CurrentPage").toString();
}
//将当前页数转换为整数
if(curPage != null){
Integer aa = Integer.parseInt(curPage);
currentPage = aa.intValue();
}
//将currentPage的数据清除掉,免得占用内存
session.removeValue("UserCurrentPage");
//从数据库中读取用户列表
UserDao userDao = new UserDaoImpl();
List list = userDao.getUserList();
//通过下面几种情况得到总页数
if(list.size() == 0)
total = 1;
if(list.size()%10 == 0)
total = list.size()/10;
if(list.size()%10 != 0)
total = list.size()/10+1;
try {
out.print("<a href="+action+"?"+type+"age="+1+"&type="+type+">首页</a> ");
if(currentPage > 1)
out.print("<a href="+action+"?"+type+"Page="+(currentPage-1)+"&type="+type+">上一页</a> ");
else
out.print("上一页 ");
if(currentPage < total)
out.print("<a href="+action+"?"+type+"Page="+(currentPage+1)+"&type="+type+">下一页</a> ");
else
out.print("下一页 ");
out.print("<a href="+action+"?"+type+"Page="+total+"&type="+type+">尾页</a> ");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
2,部署自定义标签类
在WEB-INF文件夹下面新建文件夹:tld,在tld文件夹下建立文件HelloTag.tld,然后再部署自定义标签类:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- a tab library descriptor -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<uri>http://mytag.HelloTag.com</uri>
<tag>
<name>UserPage</name>//标签名称
<tag-class>mathmodel.sg.common.showPage.UserEvalPage</tag-class>//标签类路径
</tag>
</taglib>
3,创建业务类
在src目录下建立包:com.sg.biz。在包下建立业务类:UserBiz.java,其中有实现方法public List getUserListByPage(int page):
//创建通过page获取的用户列表
List listUser = new ArrayList();
//从数据库中读取所有的用户列表
UserDao userDao = new UserDaoImpl();
List list = userDao.getUserList();
//定义总页数
int totalpage = 0;
if(list.size() == 0){
totalpage = 1;
}
if(list.size()%10 == 0){
totalpage = list.size()/10;
}
if(list.size()%10 != 0){
totalpage = list.size()/10+1;
}
//如果当前页面为尾页,总页数不为1
if(page == totalpage && totalpage !=1){
for(int j = (page-1)*10;j<list.size();j++){
User user = (User)list.get(j);
listUser.add(user);
}
}
//如果总页数为1,当前页数为1
else if(totalpage == 1 && page == 1){
for(int k = 0;k<list.size();k++){
User user = (User)list.get(k);
listUser.add(user);
}
}
//如果总页数不为1,当前页数为1
else if(totalpage != 1 && page == 1){
for(int i=0;i< page*10;i++){
User user = (User)list.get(i);
listUser.add(user);
}
}
else{
for(int y = (page-1)*10;y < page*10;y++){
User user = (User)list.get(y);
listUser.add(user);
}
}
return listUser;
4,创建公用的servlet
在src目录下,建立包:com.sg.servlet,在包下新建CommonShowPageServlet.java
实现其中的doGet(HttpServletRequest request,HttpServletResponse response)方法(doPost()方法与其相同):
//设置请求参数的字符集
request.setCharacterEncoding("gbk");
//从标签中获取分页的类型
String type = request.getParameter("type");
//定义当前页数
int currentpage = 0;
//获取传递的当前页参数
String page = request.getParameter(type+"Page");//MovePicPage
//如果传递的当前页数为空,则当前页为1
if(page == null){
currentpage = 1;
}else{
currentpage = Integer.parseInt(request.getParameter(type+"Page"));
}
//将当前页数保存到session中
HttpSession session = request.getSession();
session.setAttribute(type+"CurrentPage", currentpage);
//通过不同种分页,获取不同的列表
if(type.equals("User")){
UserBiz userBiz = new UserBiz();
List list = userBiz.getUserListByPage(currentpage);
session.setAttribute(type+"List", list);
response.sendRedirect("index.jsp");
}
5.在jsp页面实现显示用户列表
//从session中获取列表
List list = (List)session.getAttribute("UserList");
//如果session中没有值,那么表示当前页数为1
if(list == null){
UserBiz userBiz = new UserBiz();
list = userBiz.getUserListByPage(1);
}
//使用完session后,立马消掉session,免得占用内存
session.removeValue("UserList");
....... 接下来就是从list中取用户信息,相信大家都知道了.......
|
|