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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 十年多年前被怨错拘留了怎么办 与室友关系闹僵怎么办 开庭后被告威胁我们证人怎么办 开车撞了豪车怎么办 我把人撞了全责怎么办 开车撞伤人没钱赔怎么办 开车撞伤无证驾驶人怎么办 开车把人撞伤了只买交强险怎么办 开车撞伤人赔不起怎么办 如果车撞死人了怎么办 给车撞了跑了怎么办 开车把人撞死了怎么办 开车把人蹭了怎么办 驾照被扣54分怎么办? 驾照被扣了12分怎么办 驾驶证丢失后被扣分怎么办 驾照扣了三十分怎么办 一次被扣了12分怎么办 驾照被扣35分后怎么办 我驾驶证扣了6分怎么办 c1驾照被扣6分怎么办 被扣了6分怎么办 今年扣了6分怎么办 驾照分不够扣了怎么办 被扣6分怎么办罚款15 驾照分数扣36分怎么办 驾照12分不够扣怎么办 驾照b证扣分了怎么办 违章18分不够扣怎么办 b2驾驶证扣11分怎么办 驾照一共扣30分怎么办 驾照扣了100分怎么办 驾照扣40多分怎么办 驾照被扣69分怎么办 驾照被扣200多分怎么办 b2驾照扣了分怎么办 驾驶证在外地被冒用怎么办 身份证被冒用办驾照怎么办 外国人在中国境内死了怎么办 台风来临时航船应该怎么办 越南攻占太平岛台湾怎么办