java中自定义分页标签
来源:互联网 发布:广告设计软件下载 编辑:程序博客网 时间:2024/05/02 01:11
/** 有关该方法的简介 * PageModel 类,分页的一个实体类 * StudentInfo 类,该方法中已studentinfo表作为操作表,该类为表的字段属性 * UtilDB 类,数据库的连接与关闭 * StudentDao 类,表的查询类(分页查询) * tag类,要继承TagSupport,继承后该类下有三个常用的方法(doStartTag,doAfterBody,doEndTag) * tld类,相当于一个配置文件 * *///PageModel 类import java.util.List;public class PageModel<T> { // 定义当前页 private int pageNo; // 每页显示的记录数 private int pageSize; // 总记录数 private int count; // 数据集合 private List<T> all; public List<T> getAll() { return all; } public void setAll(List<T> all) { this.all = all; } /** * 首页 * * @return */ public int getIndex() { return 1; } /** * 尾页 * * @return */ public int getLastPage() { if (this.getCount() % this.getPageSize() == 0) { return this.getCount() / this.getPageSize(); } else { return this.getCount() / this.getPageSize() + 1; } } /** * 上一页 * * @return */ public int getPagePerv() { if (this.getPageNo() - 1 < 1) { return 1; } else { return this.getPageNo() - 1; } } /** * 下一页 * * @return */ public int getPageNext() { if (this.getPageNo() + 1 > this.getLastPage()) { return this.getLastPage(); } else { return this.getPageNo() + 1; } } /** * 各属性的 get/set 方法 * * @return */ public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCount() { return count; } public void setCount(int count) { this.count = count; }}//StudentInfo 类public class StudentInfo { private int stuNo; private String name; private String sex; private int age; public int getStuNo() { return stuNo; } public void setStuNo(int stuNo) { this.stuNo = stuNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public StudentInfo(int stuNo, String name, String sex, int age) { super(); this.stuNo = stuNo; this.name = name; this.sex = sex; this.age = age; }}//UtilDB 类import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class UtilDB { /** * 得到数据库操作对象 */ private static Connection con=null; /** * 链接数据库 * @return */ public static Connection getCon(){ try { //加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //该连接方式为oracle的连接方式 con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); } catch (Exception e) { e.printStackTrace(); } return con; } /** * 关闭数据库 * @param pst * @param rs * @param con * @throws SQLException */ public static void closeDB(PreparedStatement pst,ResultSet rs,Connection con) throws SQLException{ if(pst!=null){ pst.close(); } if(rs!=null){ rs.close(); } if(con!=null){ con.close(); } }}//StudentDao 类import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import util.UtilDB;import entity.PageModel;import entity.StudentInfo;public class StudentDao { /** * 得到数据库操作对象 */ private static PreparedStatement pst=null; private static ResultSet rs=null; private static Connection con=null; public PageModel<StudentInfo> selectAll(int pageNo,int pageSize){ //创建 pagemodel 对象 PageModel<StudentInfo> pm=new PageModel<StudentInfo>(); //创建集合,用于封装 student 信息 List<StudentInfo> slist=new ArrayList<StudentInfo>(); try { //链接数据库 con=UtilDB.getCon(); pst=con.prepareStatement("select * from (select rownum r ,s.* from studentinfo s) where r between ("+pageNo+"-1)*10+1 and "+pageNo+"*"+pageSize+""); //执行 sql 语句 rs=pst.executeQuery(); while(rs.next()){ //下标从 2 开始,因为 下标为 1 的是 rownum,如果从1开始会报错 StudentInfo s=new StudentInfo(rs.getInt(2), rs.getString(3), rs.getString(4), rs.getInt(5)); slist.add(s); } //为 pagemodel 类设置值 pm.setAll(slist); pm.setPageNo(pageNo); pm.setPageSize(pageSize); pm.setCount(this.count()); } catch (Exception e) { e.printStackTrace(); }finally{ try { //关闭数据库 UtilDB.closeDB(pst, rs, con); } catch (Exception e) { e.printStackTrace(); } } return pm; } /** * 得到总共有多少条数据 * @return */ public int count(){ int count=0; try { //链接数据库 con=UtilDB.getCon(); pst=con.prepareStatement("select count(*) from studentinfo"); //执行sql rs=pst.executeQuery(); if(rs.next()){ count=rs.getInt(1); } } catch (Exception e) { e.printStackTrace(); }finally{ try { //关闭数据库 UtilDB.closeDB(pst, rs, con); } catch (SQLException e) { e.printStackTrace(); } } return count; }}//创建一个tag类(PageModelTag )import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;import entity.PageModel;public class PageModelTag extends TagSupport { //标签各属性 private String scope; private String name; private String var; private String url; private String colspan; //定义分页对象 PageModel<?> pm=null; //迭代器 Iterator iter=null; public int doStartTag() throws JspException { Object obj=null; //判断是哪个作用域 if("page".equals(scope)){ obj=pageContext.getAttribute(name, pageContext.PAGE_SCOPE); } if("request".equals(scope)){ obj=pageContext.getAttribute(name, pageContext.REQUEST_SCOPE); } if("session".equals(scope)){ obj=pageContext.getAttribute(name, pageContext.SESSION_SCOPE); } if("application".equals(scope)){ obj=pageContext.getAttribute(name, pageContext.APPLICATION_SCOPE); } // 将 obj 转化成 pm pm=(PageModel<?>) obj; List all=pm.getAll(); iter=all.iterator(); if(iter.hasNext()){ pageContext.setAttribute(var, iter.next()); //执行doAfterBody()方法 return EVAL_BODY_INCLUDE; }else{ return super.doStartTag(); } } public int doAfterBody() throws JspException { if(iter.hasNext()){ pageContext.setAttribute(var, iter.next()); //再一次执行doStartTag(),doStartTag与doAfterBody这样就相当于一个循环 return EVAL_BODY_AGAIN; }else{ return super.doAfterBody(); } } public int doEndTag() throws JspException { //创建输出流对象 JspWriter out=pageContext.getOut(); String href=url+"?pageNo="; try { out.print("<tr align='center'>"); out.print("<td colspan="+colspan+">"); out.print("共"+pm.getCount()+"条记录,当前 "+pm.getPageNo()+" / "+pm.getLastPage()+" "); out.print("<a href="http://zxs71717.blog.163.com/blog/+href+1+">首页</a>"); out.print("<a href="http://zxs71717.blog.163.com/blog/+href+pm.getPagePerv()+">上一页</a>"); out.print("<a href="http://zxs71717.blog.163.com/blog/+href+pm.getPageNext()+">下一页</a>"); out.print("<a href="http://zxs71717.blog.163.com/blog/+href+pm.getLastPage()+">尾页</a>"); out.print("</td>"); out.print("</tr>"); } catch (IOException e) { e.printStackTrace(); } return super.doEndTag(); } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVar() { return var; } public void setVar(String var) { this.var = var; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getColspan() { return colspan; } public void setColspan(String colspan) { this.colspan = colspan; } //创建一个tld<taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>fenye</short-name> <uri>www.fenyeo2</uri> <tag> //下面的红色代码很重要 <name>fenye</name> <tag-class>tag.PageModelTag</tag-class> //设置标签中的属性,各属性的name要与tag类中的属性对应,如果不对应,在映射的时候会出现问题 <attribute> <name>scope</name> //设置该属性是否是该标签的必须属性以及在该标签中是否可以使用EL表达式 <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>colspan</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>//创建一个index.jsp页面,通过超链接跳转的下面的servletpublic class StudentServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //此处最好用一下 doPost 方法,表单的默认提交方式为get doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建StudentDao类的一个对象 StudentDao dao=new StudentDao(); //当前页 int pageNo=1; //每页显示的条数 int pageSize=10; //获取页面传过来的当前的页码 String pageNos=request.getParameter("pageNo"); //判断pageNos,并设置pageNo if(pageNos!=null && !"".equals(pageNos)){ pageNo=Integer.parseInt(pageNos); } //调用分页查询的方法 PageModel<StudentInfo> pm=dao.selectAll(pageNo, pageSize); //把分页查询出来的数据保存的request request.setAttribute("pm", pm); //跳转 request.getRequestDispatcher("../list.jsp").forward(request, response); }} //list.jsp页面的主要代码//要想使用自定义标签,必须有如下的一个步骤,uri为该标签的tld文件中的uri,prefix的值可以自定义<%@ taglib uri="www.fenyeo2" prefix="my" %><table border="1" cellpadding="0" cellspacing="0" align="center" width="60%" height="50%"> <tr align="center"> <td>学号</td> <td>姓名</td> <td>性别</td> <td>年龄</td> </tr> //my 是prefix的值,fenye是tld中的name <my:fenye url="servlet/StudentServlet" var="s" name="pm" scope="request" colspan="4"> //使用的EL表达式(${ }),也可以用java代码(< % = % >) <tr align="center"> <td>${s.stuNo }</td> <td>${s.name }</td> <td>${s.sex }</td> <td>${s.age }</td> </tr> </my:fenye> </table>
0 0
- java中自定义分页标签
- java自定义分页标签
- java自定义分页标签
- JAVA自定义分页标签类
- java中自定义标签
- struts2中实现自定义分页标签
- Struts2中实现自定义分页标签
- Struts2中实现自定义分页标签
- Struts2中实现自定义分页标签2
- java 模糊查询 分页(自定义标签)
- java 模糊查询 分页(自定义标签)
- JAVA 自定义 分页 标签 的实现
- Java循环中自定义标签
- jsp 自定义分页标签
- 自定义分页标签
- 自定义标签通用分页
- 自定义分页标签
- Hibernate分页+自定义标签
- Expression Tree Introduction
- ASP.NET MVC4中@model使用多个类型实例的方法
- mantis的使用
- Java高级JUnit、注解
- struts2的通配符映射
- java中自定义分页标签
- 【CCF】最优灌溉
- Java:重写equals()和hashCode()
- 2014 年最热门的国人开发开源软件 TOP 100
- hdu2046 骨牌铺方格
- python 9.2 multiprocessing
- 异常
- 硬盘的存储原理和内部架构
- 2015.9.1组队赛第2场1003