<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    §封Ja葬va§

    自定義分頁標(biāo)簽

    近期在做的S2SH項(xiàng)目,因?yàn)槎嗵幱玫椒猪摚珺OSS要求小弟將其抽象出來。小弟不才,實(shí)際參與開發(fā)的經(jīng)驗(yàn)也就1年。
    于是花了點(diǎn)時(shí)間將其做成自定義標(biāo)簽供所有需要分頁的業(yè)務(wù)調(diào)用。小結(jié)一下,供新手參考

    自定義標(biāo)簽使用如下:
    JSP頁面引入:
    <%@ taglib uri="/htdz-tag" prefix="htdz-tag"%>
    在需要擺放翻頁的相關(guān)按鈕處使用:
    <htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/>

    以下介紹如何自定義標(biāo)簽:

    1.首先是針對(duì)自定義標(biāo)簽的描述:
    創(chuàng)建WEB-INF/tags/htdz-tag.tld標(biāo)簽描述文件:
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
     version="2.0">
        <description>htdz tag</description>
        <display-name>htdz tag</display-name>
        <tlib-version>1.0</tlib-version>
        <short-name>htdz-tag</short-name>
        <uri>/htdz-tag</uri>
     
        <tag>
              <!--分頁控件使用說明:
              1.最全參數(shù)用法:<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}" className="button_small"/>
              1.最簡(jiǎn)參數(shù)用法:<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/>
              參數(shù)說明:
              1. pagesize為每頁記錄數(shù)(必寫)
              2. rowcount為總記錄數(shù)(必寫)
              3. currpagenum為當(dāng)前頁數(shù)(必寫)
              4. className為分頁按鈕樣式,如果不寫,則為默認(rèn)樣式
              5. action為URL請(qǐng)求路徑(必寫)
              -->
              <description>分頁控件</description>
              <!--JSP里使用時(shí)的標(biāo)簽名-->
              <name>PagerTag</name>
              <!--用以將自定義標(biāo)簽解析成控件的Java類-->
              <tag-class>com.htdz.util.tag.PagerTag</tag-class>
              <body-content>JSP</body-content>
              <!--每個(gè)attribute代表標(biāo)簽的一個(gè)屬性-->
              <attribute>
                   <description>pagesize:每頁條數(shù)</description>
                   <!--屬性名-->
                   <name>pagesize</name>
                   <!--是否必填屬性-->
                   <required>true</required>
                   <!--此屬性值是否接受EL,<%= 之類的形式-->
                   <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>rowcount:總記錄數(shù)</description>
                 <name>rowcount</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>currpagenum:當(dāng)前頁數(shù)</description>
                 <name>currpagenum</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>action:URL請(qǐng)求路徑</description>
                 <name>action</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>className:用于客戶端確定分頁按鈕的樣式</description>
                 <name>className</name>
                 <required>false</required>
             </attribute>
         </tag>

    </taglib>

    2.創(chuàng)建用于將標(biāo)簽解析為頁面翻頁控件的類
    PagerTag.java

    public class PagerTag extends TagSupport {

        public static final int USER_PAGESIZE = 5;// 禮品搜索--每頁記錄數(shù)
        private static final String DEFAULT_BUTTON_CLASS= "button_small"; //翻頁按鈕默認(rèn)樣式
        private static final String DISABLE_BUTTON_CLASS= "button_small_disable"; //失效按鈕默認(rèn)樣式
     
        private int pagesize;
        private int rowcount;
        private int currpagenum;
        private String action;
        private String className;

        public PagerTag() {

        }

        public void setPagesize(int pagesize) {
            this.pagesize = pagesize;
        }
        public void setRowcount(int rowcount) {
            this.rowcount = rowcount;
        }
       public void setCurrpagenum(int currpagenum) {
            this.currpagenum = currpagenum;
        }
        public void setClassName(String className) {
            this.className = className;
        }
        public void setAction(String action) {
            this.action = action;
        }

        public int doStartTag() throws JspException {
     
            if (new Integer(pagesize) == null) {
                throw new JspException("PagerTag標(biāo)簽中缺乏pagesize屬性!");
            }else if(pagesize==0){
                throw new JspException("PagerTag標(biāo)簽中的pagesize屬性無值!");
            }
            if (new Integer(rowcount) == null) {
                throw new JspException("PagerTag標(biāo)簽中缺乏rowcount屬性!");
            }
            if (new Integer(currpagenum) == null) {
                throw new JspException("PagerTag標(biāo)簽中缺乏currpagenum屬性!");
            }
            if (action == null) {
                throw new JspException("PagerTag標(biāo)簽中缺乏action屬性!");
            }else if(action.length()==0){
                throw new JspException("PagerTag標(biāo)簽中的action屬性無值!");
            }

            //如果頁面標(biāo)簽中沒寫className屬性,則讓翻頁按鈕應(yīng)用默認(rèn)的按鈕樣式
            if(className==null||className.length()==0){
                className = DEFAULT_BUTTON_CLASS;
            }
            //獲取總頁數(shù)
            int totalpagesize = getTotalpagesize(rowcount);

            //用以標(biāo)志是否能上翻
            boolean noUp = false;
            //用以標(biāo)志是否能下翻
            boolean noDown = false;

            //聲明應(yīng)用于'首頁','上一頁'按鈕的樣式(因?yàn)榇藗z按鈕要么同時(shí)失效,要么同時(shí)可用)
            String buttonClass1 = className;
            //聲明應(yīng)用于'下一頁','尾頁'按鈕的樣式(同上)
            String buttonClass2 = className;
     
            //如果無記錄,則設(shè)置總頁數(shù)與當(dāng)前頁數(shù)都為1
            if(rowcount==0){
                currpagenum = 1;
                totalpagesize = 1;
            }
     
            //如果當(dāng)前頁是第一頁
            if(currpagenum==1){
                noUp = true;
                //設(shè)置'首頁','上一頁'按鈕失效樣式
                buttonClass1 = DISABLE_BUTTON_CLASS;
            }
            //如果當(dāng)前頁是最大頁
            if(currpagenum==totalpagesize){
                noDown = true;
                //設(shè)置'下一頁','尾頁'按鈕失效樣式
                buttonClass2 = DISABLE_BUTTON_CLASS;
            }
     

            try {
                StringBuffer html = new StringBuffer();
      
                html.append(currpagenum+"/"+totalpagesize+"頁");

                html.append("<input class="+buttonClass1+" type=\"button\" value=\"首頁\" onclick=\"turnPage('first','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
                if(noUp){
                    html.append("disabled=\"true\"");
                }
                html.append("/>");

                html.append("<input class="+buttonClass1+" type=\"button\" value=\"上一頁\" onclick=\"turnPage('up','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
                if(noUp){
                    html.append("disabled=\"true\"");
                }
                html.append("/>");
      
                html.append("<input class="+buttonClass2+" type=\"button\" value=\"下一頁\" onclick=\"turnPage('down','"+currpagenum+"','"+totalpagesize+"','"+action+"')\"");
                if(noDown){
                    html.append("disabled=\"true\"");
                }
                html.append("/>");

                html.append("<input class="+buttonClass2+" type=\"button\" value=\"尾頁\" onclick=\"turnPage('last','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");
                if(noDown){
                    html.append("disabled=\"true\"");
                }
                html.append("/>");

                html.append(currpagenum+"/"+totalpagesize+"頁&nbsp;&nbsp;");

                html.append("<input type=\"text\" maxlength=\"3\" id=\"text\" size=\"3\" onkeypress=\"return checkInput(event);\" />頁");
                html.append("<input class="+className+" type=\"button\" value=\"GO\" onclick=\"turnPage('to','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" />");
                pageContext.getOut().println(html.toString());
            } catch (Exception e) {
                throw new JspException(e.getMessage());
            }
             return this.SKIP_BODY;
        }

         /**
          * 根據(jù)總記錄數(shù)得到總頁數(shù)
          *
          * @param rowcount
          *            總記錄數(shù)
          * @return 總頁數(shù)
          */
        public int getTotalpagesize(int rowcount) {
            int totalpagesize = 0;
     
            if (rowcount % pagesize == 0) {
                totalpagesize = rowcount / pagesize;
            } else {
                totalpagesize = rowcount / pagesize + 1;
            }
            return totalpagesize;
        }
    }

    到此為止,自定義標(biāo)簽書已完成。
    可應(yīng)用于項(xiàng)目各處,
    只要頁面上遵循標(biāo)簽描述規(guī)則,后臺(tái)該給標(biāo)簽屬性傳值的時(shí)候記得傳就行了。
    以下用一個(gè)簡(jiǎn)單的例子來說明一下,紅色字體顯示的部分別忘記寫就行了。

    UserAction.java:
    public class UserAction extends ActionSupport {

        private UserService userService;
        private List<User> users;

        public String findUser(){
            String str = null;
            HttpServletRequest request = ServletActionContext.getRequest();
            Map sessionMap = ActionContext.getContext().getSession();
     
            String currpagenum= "1";
            try {
                String pagenum = request.getParameter("pagenum ");
                if(pagenum != null && pagenum .length()!=0){
                    currpagenum= pagenum ;
                }
            } catch (Exception e) {

            }
     
            //查詢用戶記錄
            users= userService.findUser(pageNum);
            if(users.size!=0){
                request.setAttribute("users", users);

                int rowcount = userService.getCount();

                request.setAttribute("rowcount ",rowcount );
                request.setAttribute("currpagenum",currpagenum);

                str = "success";//成功視圖
            }else{
                message = "無記錄!"               
                str = "failure";//失敗視圖
            }
      
            request.setAttribute("pagesize", PagerTag.USER_PAGESIZE);
            request.setAttribute("action", "findUser.action);

            //返回視圖
            return str;
        }


        public UserService getUserService() {
            return userService;
        }
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
       
        public List<User> getUsers(){
            return users;
        }
        public void setUsers(List<User> users){
            this.users = users;   
        }

    }

     
    UserService.java:

    public class UserService {

        private UserDao userDao;

        public List<User> findUser(String pageNum){
            List<User> userList = userDao.findUser(pageNum);
            return userList;
        }

        public int getCount(){
            int count = userDao.getCount();
            return count;
        }

        public UserDao getUserDao() {
            return userDao;
        }
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }


    UserDao.java:

    public class UserDao extends HibernateDaoSupport {

        /**
         * 查詢用戶
         * @return User對(duì)象集合
         */
        public List<User> findUser(String pagenum) {
            List<User> users = null;
            Session session = null;
            try {
                int myPagenum= Integer.parseInt(pagenum);
                String hql = "from User";
                session = this.getSession();
                Query query = session.createQuery(hql);
                query.setFirstResult(Pager.USER_PAGESIZE * (myPagenum - 1));
                query.setMaxResults(Pager.USER_PAGESIZE);
                users = query.list();
                session.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            if (session != null) {
                session.close();
            }
        }
        return users;
    }


        /**
         * 獲取用戶總記錄數(shù)
         * @return 用戶總記錄數(shù)
         */
        public int getCount(){
            String hql ="select count(id) from User";
            Session session = null;
            int count =0;
            try {
                session = this.getSession();
                Query query = session.createQuery(hql);
                List list = query.list();
                session.flush();
                count = Integer.parseInt(list.get(0).toString());
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
            session.close();
            }
            return count;
        }

    }

    posted on 2009-04-04 00:23 §朱家二少§ 閱讀(3482) 評(píng)論(5)  編輯  收藏 所屬分類: J2SE

    Feedback

    # re: 自定義分頁標(biāo)簽 2009-04-04 18:40 popoer

    為什么要重新發(fā)明輪子呢,我覺得DisplayTag很好用!  回復(fù)  更多評(píng)論   

    # re: 自定義分頁標(biāo)簽 2009-04-04 20:01 獨(dú)孤行

    太過于復(fù)雜,一個(gè)存儲(chǔ)過程,一個(gè)自定義標(biāo)簽類,一個(gè)控制器,然后配置一下tld,xml文件即可  回復(fù)  更多評(píng)論   

    # re: 自定義分頁標(biāo)簽 2009-04-18 13:52 Wolftotem

    我想問一下,如果是多條件組合查詢時(shí),當(dāng)點(diǎn)擊下一頁時(shí)怎樣使url記住查詢頁面的查詢參數(shù)?  回復(fù)  更多評(píng)論   

    # re: 自定義分頁標(biāo)簽 2009-04-19 23:23 §朱家二少§

    @Wolftotem
    用request.setAttribute("abc",abc);
    <form>
    <input type="hidden" name="abc" value="${abc}"/>
    </form>

      回復(fù)  更多評(píng)論   

    # re: 自定義分頁標(biāo)簽 2011-08-22 17:22 cyang

    String pagenum = request.getParameter("pagenum ");
    中的pagenum哪里來的?請(qǐng)問  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产99精品一区二区三区免费| 国产免费小视频在线观看| 一级毛片a免费播放王色电影| 亚洲理论片在线中文字幕| 国产亚洲精久久久久久无码| 四虎影视免费永久在线观看| 国产免费久久精品99re丫y| 日韩精品免费视频| WWW免费视频在线观看播放| 亚洲国产成人手机在线观看| 亚洲欧洲日韩综合| 内射干少妇亚洲69XXX| 曰韩亚洲av人人夜夜澡人人爽| 国产免费黄色大片| 成年人在线免费看视频| 国产精品久久久久久久久免费 | 成人av免费电影| 免费看h片的网站| 91视频免费网址| 日本免费大黄在线观看| 国产免费阿v精品视频网址| 国产精品黄页免费高清在线观看| 美女视频黄a视频全免费网站一区| 久久精品国产亚洲av天美18| 亚洲日本人成中文字幕| 亚洲人成日本在线观看| 亚洲喷奶水中文字幕电影 | 91九色老熟女免费资源站| 特级无码毛片免费视频尤物| a毛片在线免费观看| 成在人线av无码免费高潮喷水| 久久久久免费视频| 免费一区二区无码东京热| a级毛片免费完整视频| 一个人免费视频观看在线www| 久久久精品视频免费观看 | 亚洲色精品88色婷婷七月丁香| 亚洲色自偷自拍另类小说| 亚洲精品无码不卡在线播放HE| 亚洲美女又黄又爽在线观看| 亚洲成a人片在线观看无码|