[導入][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):
ValueListHandle(CompanySearchAction):
DataAccessObject(CompanyDaoHibernate):
文章來源: http://heyday.blogcn.com/diary,15576279.shtml
可以參考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>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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
}



2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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
}



2

3

4



5

6

7

8

9



10

11

12

13

14

15

16

17

18

19

20

21



22

23

24



25

26

27



28

29

30

31

32



33

34



35

36

37

38



39

40

41

42



43

44

45

46

47

48

49

50

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