今天利用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);
}
效果图:发不上来啊!囧......
总之,总体功能是能够实现了,就之前的两个小问题,
请朋友们帮忙看看。哪里有问题?
或者还能做怎样的优化,谢谢了!
前台不能接收到这两个数据?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);
}
效果图:发不上来啊!囧......
总之,总体功能是能够实现了,就之前的两个小问题,
请朋友们帮忙看看。哪里有问题?
或者还能做怎样的优化,谢谢了!
前台不能接收到这两个数据?2、如果前台页面已经跳转到第二页,这个时候再重新点击“查询”,查询仍然从第二页开始查询(我的初衷是重新点击,应
该是重新从第一页开始查询),应该是PageInfo中pageCurrent(页码)字段数据被改A1 请确认你的isFirst isENd的get set方法 以is开头的getset方法好像比较特殊 你最好用eclispe自动生成 不要手写A2 那你就发送请求的时候去改变pageCurrent里的值。
我就说怎么回事呢!刚才试过了,的确把这个改掉就OK了!太神奇了,怎么查都查不出来,谢谢sl兄!