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![](http://pubimage.360doc.com/wz/default.gif) 6 PaginatedListHelper ph = new PaginatedListHelper(); 7 int size = ph.getObjectsPerPage(); 8 int index = (page-1)* size; 9 companies = companyDao.find(company, index,size); 10![](http://pubimage.360doc.com/wz/default.gif) 11 int count = companyDao.getSize(company); 12 13 ph.setFullListSize(count); 14 ph.setList(companies); 15 ph.setPageNumber(page); 16![](http://pubimage.360doc.com/wz/default.gif) 17 request.setAttribute("ph", ph); 18![](http://pubimage.360doc.com/wz/default.gif) 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![](http://pubimage.360doc.com/wz/default.gif) 9 if (company.getCompanyType().getTypeId() != null) { 10 queryString += " and companyType = ?"; 11 values.add(company.getCompanyType()); 12 } 13![](http://pubimage.360doc.com/wz/default.gif) 14 Object[] objects = values.toArray(); 15![](http://pubimage.360doc.com/wz/default.gif) 16 List list = this.getHibernateTemplate().find(queryString, objects); 17 Long count = (Long) list.get(0); 18 return count.intValue(); 19 } 20![](http://pubimage.360doc.com/wz/default.gif) 21 public List find(final Company company, final int index, final int size) { 22![](http://pubimage.360doc.com/wz/default.gif) 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![](http://pubimage.360doc.com/wz/default.gif) 32 return (List) getHibernateTemplate().execute(new HibernateCallback() { 33 public Object doInHibernate(Session session) 34 throws HibernateException { 35![](http://pubimage.360doc.com/wz/default.gif) 36 Query query = session.createQuery(queryString); 37![](http://pubimage.360doc.com/wz/default.gif) 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![](http://pubimage.360doc.com/wz/default.gif) 46 query.setFirstResult(index).setMaxResults(size); 47 return query.list(); 48 } 49 }); 50 }
|