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

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

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

    waysun一路陽光

    不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks
    收藏自:http://www.tkk7.com/zhutianxiang/archive/2009/04/18/263837.html

    近期在做的S2SH項目,因為多處用到分頁,BOSS要求小弟將其抽象出來。小弟不才,實際參與開發的經驗也就1年。
    于是花了點時間將其做成自定義標簽供所有需要分頁的業務調用。小結一下,供新手參考

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

    以下介紹如何自定義標簽:

    1.首先是針對自定義標簽的描述:
    創建WEB-INF/tags/htdz-tag.tld標簽描述文件:
    <?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.最全參數用法:<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}" className="button_small"/>
              1.最簡參數用法:<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/>
              參數說明:
              1. pagesize為每頁記錄數(必寫)
              2. rowcount為總記錄數(必寫)
              3. currpagenum為當前頁數(必寫)
              4. className為分頁按鈕樣式,如果不寫,則為默認樣式
              5. action為URL請求路徑(必寫)
              -->
              <description>分頁控件</description>
              <!--JSP里使用時的標簽名-->
              <name>PagerTag</name>
              <!--用以將自定義標簽解析成控件的Java類-->
              <tag-class>com.htdz.util.tag.PagerTag</tag-class>
              <body-content>JSP</body-content>
              <!--每個attribute代表標簽的一個屬性-->
              <attribute>
                   <description>pagesize:每頁條數</description>
                   <!--屬性名-->
                   <name>pagesize</name>
                   <!--是否必填屬性-->
                   <required>true</required>
                   <!--此屬性值是否接受EL,<%= 之類的形式-->
                   <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>rowcount:總記錄數</description>
                 <name>rowcount</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>currpagenum:當前頁數</description>
                 <name>currpagenum</name>
                 <required>true</required>
                 <rtexprvalue>true</rtexprvalue>
             </attribute>
             <attribute>
                 <description>action:URL請求路徑</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.創建用于將標簽解析為頁面翻頁控件的類
    PagerTag.java

    public class PagerTag extends TagSupport {

        public static final int USER_PAGESIZE = 5;// 禮品搜索--每頁記錄數
        private static final String DEFAULT_BUTTON_CLASS= "button_small"; //翻頁按鈕默認樣式
        private static final String DISABLE_BUTTON_CLASS= "button_small_disable"; //失效按鈕默認樣式
     
        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標簽中缺乏pagesize屬性!");
            }else if(pagesize==0){
                throw new JspException("PagerTag標簽中的pagesize屬性無值!");
            }
            if (new Integer(rowcount) == null) {
                throw new JspException("PagerTag標簽中缺乏rowcount屬性!");
            }
            if (new Integer(currpagenum) == null) {
                throw new JspException("PagerTag標簽中缺乏currpagenum屬性!");
            }
            if (action == null) {
                throw new JspException("PagerTag標簽中缺乏action屬性!");
            }else if(action.length()==0){
                throw new JspException("PagerTag標簽中的action屬性無值!");
            }

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

            //用以標志是否能上翻
            boolean noUp = false;
            //用以標志是否能下翻
            boolean noDown = false;

            //聲明應用于'首頁','上一頁'按鈕的樣式(因為此倆按鈕要么同時失效,要么同時可用)
            String buttonClass1 = className;
            //聲明應用于'下一頁','尾頁'按鈕的樣式(同上)
            String buttonClass2 = className;
     
            //如果無記錄,則設置總頁數與當前頁數都為1
            if(rowcount==0){
                currpagenum = 1;
                totalpagesize = 1;
            }
     
            //如果當前頁是第一頁
            if(currpagenum==1){
                noUp = true;
                //設置'首頁','上一頁'按鈕失效樣式
                buttonClass1 = DISABLE_BUTTON_CLASS;
            }
            //如果當前頁是最大頁
            if(currpagenum==totalpagesize){
                noDown = true;
                //設置'下一頁','尾頁'按鈕失效樣式
                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;
        }

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

    到此為止,自定義標簽書已完成。
    可應用于項目各處,
    只要頁面上遵循標簽描述規則,后臺該給標簽屬性傳值的時候記得傳就行了。
    以下用一個簡單的例子來說明一下,紅色字體顯示的部分別忘記寫就行了。

    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對象集合
         */
        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;
    }


        /**
         * 獲取用戶總記錄數
         * @return 用戶總記錄數
         */
        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-06-22 09:38 weesun一米陽光 閱讀(846) 評論(0)  編輯  收藏 所屬分類: 收藏的文章
    主站蜘蛛池模板: 67194成手机免费观看| 边摸边吃奶边做爽免费视频网站 | 国产精品免费看久久久 | 亚洲爆乳无码精品AAA片蜜桃| 4444www免费看| 亚洲在成人网在线看| 最近中文字幕高清免费中文字幕mv| 亚洲AV永久纯肉无码精品动漫| 暖暖免费日本在线中文| 亚洲另类激情综合偷自拍| 最近中文字幕无免费| 亚洲一区免费在线观看| 岛国大片免费在线观看| 丰满亚洲大尺度无码无码专线| xvideos亚洲永久网址| 国产精品青草视频免费播放| 久久亚洲精品中文字幕三区| 无码国产精品一区二区免费模式| 亚洲最新永久在线观看| 在线a级毛片免费视频| 亚洲av乱码一区二区三区按摩| 免费亚洲视频在线观看| 国产成人高清精品免费观看| 久久99国产亚洲精品观看| 日韩免费一区二区三区在线| 亚洲AV无码精品国产成人| 久久精品国产精品亚洲下载| 无码精品人妻一区二区三区免费看| 亚洲国产情侣一区二区三区| 日本免费高清一本视频| 国产精品一区二区三区免费| 久久亚洲私人国产精品| 卡一卡二卡三在线入口免费| 九九久久国产精品免费热6| 亚洲2022国产成人精品无码区| 久久国内免费视频| 丁香六月婷婷精品免费观看| 午夜亚洲www湿好大| 国产大片免费观看中文字幕| 99免费精品视频| 亚洲无码一区二区三区|