[導入][AppFuse] AppFuse使用手記--Display Tag 分頁(九) [原]

              AppFuse使用Display Tag做為內容顯示。Display Tag的分頁默認是按全量數據自動進行分頁。如果數據量大的話,就很耗費性能。
             
              可以參考External Paging and Sorting。
             
              如果少量數據可以通過Tag的參數進行分頁,大數據量的化,可以采用Valuelist pattern,對象繼承org.displaytag.pagination.PaginatedList實現分頁和排序。
             
              那么什么是Valuelist pattern?
             
              Valuelist patten(值列表處理器)是J2EE核心模式中的一種。簡單點說明就是,Client(客戶端)通過訪問ValueListHandler(值列表處理器)獲得ValueListIterator(值列表迭代器),ValueListHandle則通調用DataAccessObject(數據訪問對象)。
             
             
              在我們的實現里,Client應該是JSP,ValueListHandle則是Action,DataAccessObject最后的實現是HibernateDAO。

              Client(companyList.jsp):
           1    <display:table name="ph" class="table" requestURI="" id="ph" export="true">
           2        <display:column property="companyId" sortable="true" href="editCompany.html" media="html"
           3                        paramId="companyId" paramProperty="companyId" titleKey="company.companyId"/>
           4        <display:column property="companyId" media="csv excel xml pdf" titleKey="company.companyId"/>
           5        <display:column sortProperty="status" sortable="true" titleKey="company.status">
           6            <input type="checkbox" disabled="disabled" <c:if test="${companyList.status}">checked="checked"</c:if>/>
           7        </display:column>
           8    
           9        <display:column property="companyType.typeName" sortable="true" titleKey="companyType.typeName"/>
          10        <display:column property="companyName" sortable="true" titleKey="company.companyName"/>
          11    
          12        <display:setProperty name="paging.banner.item_name"><fmt:message key="companyList.company"/></display:setProperty>
          13        <display:setProperty name="paging.banner.items_name"><fmt:message
          14                key="companyList.companies"/></display:setProperty>
          15    
          16        <display:setProperty name="export.excel.filename"><fmt:message key="companyList.title"/>.xls</display:setProperty>
          17        <display:setProperty name="export.csv.filename"><fmt:message key="companyList.title"/>.csv</display:setProperty>
          18        <display:setProperty name="export.pdf.filename"><fmt:message key="companyList.title"/>.pdf</display:setProperty>
          19    </display:table>      
             
              ValueListHandle(CompanySearchAction):
           1    public String search() {
           2        HttpServletRequest request = getRequest();
           3        String strPage = request.getParameter("page");
           4        int page = strPage == null ? 1 : new Integer(strPage).intValue();
           5
           6        PaginatedListHelper ph = new PaginatedListHelper();
           7        int size = ph.getObjectsPerPage();
           8        int index = (page-1)* size;
           9        companies = companyDao.find(company, index,size);
          10
          11        int count = companyDao.getSize(company);
          12        
          13        ph.setFullListSize(count);
          14        ph.setList(companies);
          15        ph.setPageNumber(page);
          16
          17        request.setAttribute("ph", ph);
          18
          19        return SUCCESS;
          20    }
              
              DataAccessObject(CompanyDaoHibernate):
           1    public int getSize(final Company company) {
           2        String queryString = "select count(*) from Company where 1 = 1";
           3        ArrayList<Serializable> values = new ArrayList<Serializable>();
           4        if (company.getCompanyName() != null && !company.getCompanyName().equals("")) {
           5            queryString += " and companyName like ?";
           6            values.add("%" + company.getCompanyName() + "%");
           7        }

           8
           9        if (company.getCompanyType().getTypeId() != null{
          10            queryString += " and companyType = ?";
          11            values.add(company.getCompanyType());
          12        }

          13
          14        Object[] objects = values.toArray();
          15
          16        List list = this.getHibernateTemplate().find(queryString, objects);
          17        Long count = (Long) list.get(0);
          18        return count.intValue();
          19    }

          20
          21    public List find(final Company company, final int index, final int size) {
          22
          23        String sql = "from Company where 1 = 1";
          24        if (company.getCompanyName() != null && !company.getCompanyName().equals("")) {
          25            sql += " and companyName like :companyName";
          26        }

          27        if (company.getCompanyType().getTypeId() != null{
          28            sql += " and companyType = :companyType";
          29        }

          30        final String queryString = sql;
          31
          32        return (List) getHibernateTemplate().execute(new HibernateCallback() {
          33            public Object doInHibernate(Session session)
          34                    throws HibernateException {
          35
          36                Query query = session.createQuery(queryString);
          37
          38                if (company.getCompanyName() != null && !company.getCompanyName().equals("")) {
          39                    String companyName = "%" + company.getCompanyName() + "%";
          40                    query.setParameter("companyName", companyName);
          41                }

          42                if (company.getCompanyType().getTypeId() != null{
          43                    query.setParameter("companyType", company.getCompanyType());
          44                }

          45
          46                query.setFirstResult(index).setMaxResults(size);
          47                return query.list();
          48            }

          49        }
          );
          50    }
            

          文章來源: http://heyday.blogcn.com/diary,15576279.shtml

          posted on 2008-05-04 20:57 不同樊響 閱讀(1164) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案(23)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 泊头市| 利津县| 涞水县| 东方市| 潼关县| 揭东县| 富锦市| 都江堰市| 米易县| 大港区| 乐山市| 临潭县| 卢湾区| 思茅市| 汾西县| 通化市| 汤原县| 阜宁县| 高碑店市| 苍南县| 房产| 丁青县| 延长县| 大冶市| 建平县| 永康市| 霍城县| 元阳县| 望江县| 南郑县| 寿光市| 留坝县| 大庆市| 元阳县| 乌审旗| 泰兴市| 恩平市| 博乐市| 威宁| 九龙城区| 尚义县|