今天利用Hibernate写了一个简单的分页功能,分页是能够实现了,但是遇到了两个小问题,不知道如何解决:1、我的分页类PageInfo中定义了两个变量,isFirst,isEnd,用以判断是否为首页和末页,在后台能够正常处理,但是就是在
   前台不能接收到这两个数据?2、如果前台页面已经跳转到第二页,这个时候再重新点击“查询”,查询仍然从第二页开始查询(我的初衷是重新点击,应
   该是重新从第一页开始查询),应该是PageInfo中pageCurrent(页码)字段数据被改以下是我的代码:PageInfo类:public class PageInfo {

private int rowCount;            //记录总数
private int pageCount;           //页数
private int pageCurrent = 1;     //当前页面数
private int pageSize = 10;       //每页显示记录数
private int isFirst = 0; //是否为第一页,之前是boolean类型,后改为Int型,仍然不能传出
private int isEnd = 0;   //是否为最后一页
private List result;             //查询结果集

public PageInfo() {}

public PageInfo(int rowCount, int pageCount, int pageCurrent, int pageSize,int isFirst,int isEnd,
List result) {
this.rowCount = rowCount;
this.pageCount = pageCount;
this.pageCurrent = pageCurrent;
this.pageSize = pageSize;
this.isEnd = isEnd;
this.isFirst = isFirst;
this.result = result;
}

public PageInfo(int pageCurrent,int pageSize){
this.pageCurrent = pageCurrent;
this.pageSize = pageSize;
}
         //此处省略set和get方法
page处理类: /**
     * @function 分页显示符合所有的记录数,将查询结果封装为PageInfo
     * @param fullClassName
     *            完整持久化实体类名,需带完整包路径
     * @param pageCurrent
     *            当前页数
     * @param pageSize
     *            每页显示的条数
     * @param criterions
     *            不定参数Criterion
     * @return 查询结果PageInfo
     */ public PageInfo queryEntitiesByCriteriaWihtPage(String fullClassName , int pageCurrent, int pageSize,
Criterion... criterions) { PageInfo page = null;
try {
Criteria criteria = this.getSession().createCriteria(
Class.forName(fullClassName));
if (criterions != null) {
for (Criterion criterion : criterions) {
if (criterion != null) {
criteria.add(criterion);
}
}
} // 获取根据条件分页查询的总行数
int rowCount = (Integer) criteria.setProjection(
Projections.rowCount()).uniqueResult();
criteria.setProjection(null);

// 通过总行数和每页条数,计算页数
int pageCount = this.pageCount(rowCount, pageSize);

criteria.setFirstResult((pageCurrent - 1) * pageSize);
criteria.setMaxResults(pageSize); List result = criteria.list();
int isFirst = 0;
int isEnd = 0;
if(pageCurrent == pageCount){
isEnd = 1;
}
if(pageCurrent == 1){
isFirst = 1;
}
page = new PageInfo(rowCount, pageCount, pageCurrent, pageSize,isFirst,isEnd, 
result);
} catch (RuntimeException re) {
throw re;
} finally {
return page;
}
}
测试Action类: public String rolequery(){
  Criterion criterion1 = null,criterion2 = null;
  if(roleInfo != null){
      if(null != roleInfo.getRoleId() && !("".equals(roleInfo.getRoleId()))){
criterion1 = Restrictions.like("roleId", roleInfo.getRoleId(),MatchMode.ANYWHERE);
      }
      if(null != roleInfo.getRoleName() && !("".equals(roleInfo.getRoleName()))){
criterion2 = Restrictions.like("roleName", roleInfo.getRoleName(),MatchMode.ANYWHERE);
      }
  }

  page = pageDao.queryEntitiesByCriteriaWihtPage(
"com.adtec.datacenter.entity.manager.PtRoleInfo" , 
 page.getPageCurrent(), page.getPageSize(),criterion1,criterion2);

  return "toqery";
}
JSP代码:  <body>
    <s:form name="form1" id="form1" action="roleInput.action" method="post" theme="simple">
     <div id="div1" align="center">
     <table border="1" align="center" width="95%" >
        <tr align="center">
          <td>角色ID</td>
          <td>角色名称</td>
          <td>角色描述</td>
          <td></td>
        </tr>
        <s:iterator value="#request.page.result" var="roleInfo">
         <tr align="center">
          <td>
           <a href="roleInput.action?roleInfo.roleId=<s:property value='roleId'/>">
           <s:property value="roleId"/>
           </a>
          </td>
          <td>
           <s:property value="roleName"/>
          </td>
          <td>
           <s:property value="deil"/>
          </td>
        </tr>
         </s:iterator>
         <tr align="right">
           <td colspan="3">
            <input type="hidden" name="pageCount" value="<s:property value='page.pageCount'/>">
             <div align="right" style="margin-right:20px;">
           <s:textfield name="page.pageCurrent" size="1"></s:textfield>/
           <s:property value="page.pageCount"/>
           <s:property value="page.isFirst"/>
           <input type="image" src="<%=request.getContextPath() %>/common/images/app/first.gif" onclick="firstPage('rolequery.action');return false;">
                  <input type="image" src="<%=request.getContextPath() %>/common/images/app/prev.gif" onclick="prevPage('rolequery.action');return false;">
                  <input type="image" src="<%=request.getContextPath() %>/common/images/app/next.gif" onclick="nextPage('rolequery.action');return false;">
                  <input type="image" src="<%=request.getContextPath() %>/common/images/app/last.gif" onclick="lastPage('rolequery.action');return false;">
          </div>
         </td>
         </tr>
      </table>
      </div>
    </s:form>
  </body>
</html>
JS代码:function firstPage(actionName){
var frm = document.form1;
frm.action = actionName;
frm['page.pageCurrent'].value = 1;
window.parent.iframeRequestByForm(frm, 1);
}
  function nextPage(actionName){
var frm = document.form1;
frm.action = actionName;
frm['page.pageCurrent'].value = 1 + parseInt(frm['page.pageCurrent'].value);
window.parent.iframeRequestByForm(frm, 1);
  }
  
  function prevPage(actionName){
var frm = document.form1;
frm.action = actionName;
frm['page.pageCurrent'].value = parseInt(frm['page.pageCurrent'].value) - 1;
window.parent.iframeRequestByForm(frm, 1);
  }
  
  function lastPage(actionName){
var frm = document.form1;
frm.action = actionName;
frm['page.pageCurrent'].value = parseInt(frm['pageCount'].value);
window.parent.iframeRequestByForm(frm, 1);
  }
效果图:发不上来啊!囧......
总之,总体功能是能够实现了,就之前的两个小问题,
请朋友们帮忙看看。哪里有问题?
或者还能做怎样的优化,谢谢了!

解决方案 »

  1.   

    我的分页类PageInfo中定义了两个变量,isFirst,isEnd,用以判断是否为首页和末页,在后台能够正常处理,但是就是在
      前台不能接收到这两个数据?2、如果前台页面已经跳转到第二页,这个时候再重新点击“查询”,查询仍然从第二页开始查询(我的初衷是重新点击,应
      该是重新从第一页开始查询),应该是PageInfo中pageCurrent(页码)字段数据被改A1 请确认你的isFirst isENd的get set方法 以is开头的getset方法好像比较特殊 你最好用eclispe自动生成 不要手写A2 那你就发送请求的时候去改变pageCurrent里的值。
      

  2.   

    如果你是在不知道怎么解决isFirst isEnd的话 那就把前面的is换成其他单词 反正别用is开头。
      

  3.   

    呵呵,还有这样的问题啊?
    我就说怎么回事呢!刚才试过了,的确把这个改掉就OK了!太神奇了,怎么查都查不出来,谢谢sl兄!