分页标签的研究:
<tag>
<name>pagination</name>
<tag-class>com.pp.condition.PaginationTag</tag-class>
<attribute>
<name>sortColumns</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>sortTable</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<c:forEach var="consultProject" items="#{listChunk.list}">
PaginationTag.java
继承TagSupport
有如下方法
doStartTag() 标签的开始
{init();...}
与listchunk的关联,获得相关的值
private void init() throws JspException {
writer = pageContext.getOut();
// 获得ListChunk对象
listChunk=(ListChunk)FacesUtils.getManagedBean("listChunk");
// UIViewRoot viewRoot=FacesContext.getCurrentInstance().getViewRoot();
curPage=listChunk.getCurPage();
// 获得当前页显示多少条的信息
if (pageSizeName == null) {
pageSizeName = PAGE_SIZE;
}
pageSize = listChunk.getPageSize();
// 获得总记录数
totalRecord = listChunk.getTotalCount();
//当前页的记录数目
// curRecord = listChunk.getCurrentCount();
// 获得总页数
totalPage = listChunk.getTotalPage();
SearchConditions searchConditions=(SearchConditions)FacesUtils.getManagedBean("searchConditions");
sortColumn=searchConditions.getCondition("sortColumn");
sortOrder=searchConditions.getCondition("sortOrder");
// 当listChunk个数为零时,要能显示第1页
if (listChunk.getTotalCount() == 0) {
totalPage = 1;
}
// 获得当前页码
if (curPageName == null) {
curPageName = CUR_PAGE;
}
}
doendTag() 标签的结束
searchForm规定了吗?是的,可以看PaginationTag.java中定义的javascript中有searchForm
使用
<h:form id="searchForm">
<c:forEach var="my" items="#{listChunk.list}">
每一块dao 的listchunk()
getObjectsPaginate(query, paramMap);
public ListChunk getObjectsPaginate(Query query, Map paramMap){
ListChunk listChunk=(ListChunk)FacesUtils.getManagedBean("listChunk");
int curPage=listChunk.getCurPage();
int pageSize=listChunk.getPageSize();
if(curPage<=0)
{
curPage=1;
listChunk.setCurPage(curPage);
}
if(pageSize<=0)
{
pageSize=10;
listChunk.setCurPage(pageSize);
}
String queryString = query.getQueryString();
String[] param = query.getNamedParameters();
String fromClause = null;
int fromClausePos = queryString.toLowerCase().indexOf("from");
int count = 0;
if (fromClausePos >= 0) {
fromClause = queryString.substring(fromClausePos);
int orderPos = fromClause.toLowerCase().lastIndexOf("order by");
if(orderPos >= 0) {
fromClause = fromClause.substring(0, orderPos);
}
String countHql = "select count(*) " + fromClause;
Query countQuery = getSession().createQuery(countHql);
for (int i = 0; i < param.length; i++) {
countQuery.setParameter(param[i], paramMap.get(param[i]));
}
final Object cnt = countQuery.uniqueResult();
count = ((Long)cnt).intValue();
}
for (int i = 0; i < param.length; i++) {
query.setParameter(param[i], paramMap.get(param[i]));
}
int tempCount = (curPage - 1) * pageSize;
query.setFirstResult(tempCount);
query.setMaxResults(pageSize);
List list = query.list();
listChunk.setList(list);
listChunk.setTotalCount(count);
return listChunk;
}
<managed-bean>
<managed-bean-name>listChunk</managed-bean-name>
<managed-bean-class>
com.whlongyi.common.condition.ListChunk
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>pageSize</property-name>
<value>
#{param['pageSize']==null?10:param['pageSize']} <!-- 默认是第页10条-->
</value>
</managed-property>
<managed-property>
<property-name>curPage</property-name>
<value>#{param['curPage']==null?1:param['curPage']}</value>
</managed-property>
</managed-bean>
附件:
csdn空间5/jsf中分页的使用.rar
本文介绍了一种基于JSF的分页实现方案,通过PaginationTag标签和ListChunk对象完成分页逻辑。PaginationTag标签负责分页显示及交互,而ListChunk则用于处理数据分页。文章详细解释了PaginationTag的实现原理及其与ListChunk之间的交互过程。
88

被折叠的 条评论
为什么被折叠?



