想使用s2sh实现分页功能,相关代码如下:
index.jsp代码
<a href="pageuser.action">显示更多...</a>
struts.xml配置
<action name="pageuser" class="UserAction" method="PageUser">
<result name="success">listView.jsp</result>
</action>
applicationContext.xml配置
<bean id="UserAction" class="action.UserAction" scope="prototype">
<property name="userManager" ref="userManager"></property>
</bean>
<bean id="userManager" class="service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userDao" parent="daoTemplate" class="dao.impl.UserDaoImpl"/>
<bean id="pageDao" parent="daoTemplate" class="dao.impl.PageDaoImpl"/>
UserAction.java配置
import service.UserManager;
import common.Page;
public class UserAction extends ActionSupport implements ModelDriven<User>
{
private int pageNo;//第几页
private Page page;//包含分页信息的bean
private UserManager userManager;
......pageNo和page的getter和setter方法......
public void setUserManager(UserManager userManager)
{
this.userManager = userManager;
}
public String PageUser()
{
this.page = userManager.queryForPage(2,1);
return SUCCESS;
}
......
}Page.java代码
public class Page
{
private int firstPage;//首页
private int previewPage;//上一页
private int nextPage;//下一页
private int endPage;//尾页
private int currentPage;//当前页
private int totalPage;//总页面数
private int pageSize;//每页记录数
private int resultRows;//总记录数
private int startRowid;//页面开始记录号
private boolean isFirstPage;//是否为第一页
private boolean isLastPage;//是否为最后一页
private boolean hasPreviewPage;//是否有前一页
private boolean hasNextPage;//是否有下一页
@SuppressWarnings("unchecked")
private List list;
public void init()
{
this.firstPage = 1;
this.endPage = this.totalPage;
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviewPage = HasPreviewPage();
this.hasNextPage = HasNextPage();
if(this.isFirstPage){this.firstPage = 1 ;}
if(this.isLastPage){this.endPage = this.totalPage;}
if(this.hasPreviewPage){this.previewPage = currentPage - 1;
}else{this.previewPage = this.firstPage;}
if(this.hasNextPage){
this.nextPage = this.firstPage + 1 ;
}else{this.nextPage = this.endPage;}
}
public boolean isFirstPage() {return currentPage == 1;}
public boolean isLastPage() {return currentPage == totalPage;}
public boolean HasPreviewPage() {return currentPage != 1;}
public boolean HasNextPage() {return currentPage != totalPage;}
public void first(){
this.currentPage = 1;
}
public void next(){
if(this.currentPage+1 > this.endPage){
this.currentPage = this.endPage;
}else{
this.currentPage++;
}
}
public void previous(){
if(this.currentPage -1 < 1){
this.currentPage = 1;
}else{
this.currentPage--;
}
}
public void end(){
this.currentPage = this.endPage;
}
public void inputPageIndex(int inputPageIndex){
this.currentPage = inputPageIndex;
}
public void direct(String directPage){
if("first".equals(directPage)){
this.first();
}
if("next".equals(directPage)){
this.next();
}
if("previous".equals(directPage)){
this.previous();
}
if("end".equals(directPage)){
this.end();
}
}
//参数的setter和getter
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getPreviewPage() {
if(currentPage==1){
previewPage=currentPage;
}else{
previewPage=currentPage-1;
}
return previewPage;
}
public void setPreviewPage(int previewPage) {
this.previewPage = previewPage;
} public int getNextPage() {
if(currentPage==totalPage){
nextPage=currentPage;
}else{
nextPage=currentPage+1;
}
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getCurrentPage() {
if(currentPage<=0){currentPage = 1;}
if(currentPage>this.totalPage){currentPage = this.totalPage;}
return currentPage;
}
public void setCurrentPage(int currentPage) {
if(currentPage<=0){currentPage = 1;}
if(currentPage>this.totalPage){currentPage = this.totalPage;}
this.currentPage = currentPage;
} public int getTotalPage() {
if(resultRows%pageSize==0){
totalPage=resultRows/pageSize;
}else{
totalPage=resultRows/pageSize+1;
}
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getResultRows() {
return resultRows;
}
public void setResultRows(int resultRows) {
this.resultRows = resultRows;
}
public int getStartRowid() {
startRowid = pageSize*(currentPage-1);
return startRowid;
}
public void setStartRowid(int startRowid) {
this.startRowid = startRowid;
}
@SuppressWarnings("unchecked")
public List getList() {
return list;
}
@SuppressWarnings("unchecked")
public void setList(List list) {
this.list = list;
}
} UserManagerImpl代码
public class UserManagerImpl implements UserManager
{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public Page queryForPage(int pageRecNum,int pageNo){
Page pageBe = new Page();
pageBe.setResultRows(userDao.pageForUserCount());
pageBe.setPageSize(pageRecNum);
pageBe.setCurrentPage(pageNo);
pageBe.init();
List<User> listus = userDao.pageForUser(pageBe.getStartRowid(),pageBe.getPageSize());
pageBe.setList(listus);
return pageBe;
}
......
}UserDao.java主要代码
@SuppressWarnings("unchecked")
public List<User> pageForUser(Integer offset, Integer pageSize)
{
String hql = "from User";
return (List<User>)pageDao.findByPage(hql,offset,pageSize);
}
public int pageForUserCount()
{
String hql = "from User";
return pageDao.getAllRowCount(hql);
}
PageDao.java主要代码
/**offset第一条记录索引pageSize 每页需要显示的记录数*/
@SuppressWarnings("unchecked")
public List findByPage(final String hql,final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**根据hql查询所有记录数*/
public int getAllRowCount(String hql)
{
return getHibernateTemplate().find(hql).size();
} User.java主要代码(对应xml文件到数据表中)
...
private int id;
private String username;
private String password;
...listView.jsp主要代码:
<s:iterator value="page.list" var="usr">
<s:property value="usr.username"/>
</s:iterator>
<hr/>
共<s:property value="page.resultRows"/> 条记录
共<s:property value="page.totalPage"/> 页
当前第<s:property value="page.currentPage"/>页<br/>
<s:if test="%{page.currentPage == 1}">
第一页 上一页
</s:if>
<s:else>
<a href="pageuser.action?page=1">第一页</a>
<a href="pageuser.action?page=<s:property value="%{page.currentPage-1}"/>">上一页</a>
</s:else>
<s:if test="%{page.currentPage != page.totalPage}">
<a href="pageuser.action?page=<s:property value="%{page.currentPage+1}"/>">下一页</a>
<a href="pageuser.action?page=<s:property value="page.totalPage"/>">最后一页</a>
</s:if>
<s:else>
下一页 最后一页
</s:else>
错误提示:
java.lang.NullPointerException
dao.impl.UserDaoImpl.pageForUserCount(UserDaoImpl.java:91)
错误就是指向:return pageDao.getAllRowCount(hql);这句
我该如何修正错误?
index.jsp代码
<a href="pageuser.action">显示更多...</a>
struts.xml配置
<action name="pageuser" class="UserAction" method="PageUser">
<result name="success">listView.jsp</result>
</action>
applicationContext.xml配置
<bean id="UserAction" class="action.UserAction" scope="prototype">
<property name="userManager" ref="userManager"></property>
</bean>
<bean id="userManager" class="service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userDao" parent="daoTemplate" class="dao.impl.UserDaoImpl"/>
<bean id="pageDao" parent="daoTemplate" class="dao.impl.PageDaoImpl"/>
UserAction.java配置
import service.UserManager;
import common.Page;
public class UserAction extends ActionSupport implements ModelDriven<User>
{
private int pageNo;//第几页
private Page page;//包含分页信息的bean
private UserManager userManager;
......pageNo和page的getter和setter方法......
public void setUserManager(UserManager userManager)
{
this.userManager = userManager;
}
public String PageUser()
{
this.page = userManager.queryForPage(2,1);
return SUCCESS;
}
......
}Page.java代码
public class Page
{
private int firstPage;//首页
private int previewPage;//上一页
private int nextPage;//下一页
private int endPage;//尾页
private int currentPage;//当前页
private int totalPage;//总页面数
private int pageSize;//每页记录数
private int resultRows;//总记录数
private int startRowid;//页面开始记录号
private boolean isFirstPage;//是否为第一页
private boolean isLastPage;//是否为最后一页
private boolean hasPreviewPage;//是否有前一页
private boolean hasNextPage;//是否有下一页
@SuppressWarnings("unchecked")
private List list;
public void init()
{
this.firstPage = 1;
this.endPage = this.totalPage;
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviewPage = HasPreviewPage();
this.hasNextPage = HasNextPage();
if(this.isFirstPage){this.firstPage = 1 ;}
if(this.isLastPage){this.endPage = this.totalPage;}
if(this.hasPreviewPage){this.previewPage = currentPage - 1;
}else{this.previewPage = this.firstPage;}
if(this.hasNextPage){
this.nextPage = this.firstPage + 1 ;
}else{this.nextPage = this.endPage;}
}
public boolean isFirstPage() {return currentPage == 1;}
public boolean isLastPage() {return currentPage == totalPage;}
public boolean HasPreviewPage() {return currentPage != 1;}
public boolean HasNextPage() {return currentPage != totalPage;}
public void first(){
this.currentPage = 1;
}
public void next(){
if(this.currentPage+1 > this.endPage){
this.currentPage = this.endPage;
}else{
this.currentPage++;
}
}
public void previous(){
if(this.currentPage -1 < 1){
this.currentPage = 1;
}else{
this.currentPage--;
}
}
public void end(){
this.currentPage = this.endPage;
}
public void inputPageIndex(int inputPageIndex){
this.currentPage = inputPageIndex;
}
public void direct(String directPage){
if("first".equals(directPage)){
this.first();
}
if("next".equals(directPage)){
this.next();
}
if("previous".equals(directPage)){
this.previous();
}
if("end".equals(directPage)){
this.end();
}
}
//参数的setter和getter
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getPreviewPage() {
if(currentPage==1){
previewPage=currentPage;
}else{
previewPage=currentPage-1;
}
return previewPage;
}
public void setPreviewPage(int previewPage) {
this.previewPage = previewPage;
} public int getNextPage() {
if(currentPage==totalPage){
nextPage=currentPage;
}else{
nextPage=currentPage+1;
}
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getCurrentPage() {
if(currentPage<=0){currentPage = 1;}
if(currentPage>this.totalPage){currentPage = this.totalPage;}
return currentPage;
}
public void setCurrentPage(int currentPage) {
if(currentPage<=0){currentPage = 1;}
if(currentPage>this.totalPage){currentPage = this.totalPage;}
this.currentPage = currentPage;
} public int getTotalPage() {
if(resultRows%pageSize==0){
totalPage=resultRows/pageSize;
}else{
totalPage=resultRows/pageSize+1;
}
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getResultRows() {
return resultRows;
}
public void setResultRows(int resultRows) {
this.resultRows = resultRows;
}
public int getStartRowid() {
startRowid = pageSize*(currentPage-1);
return startRowid;
}
public void setStartRowid(int startRowid) {
this.startRowid = startRowid;
}
@SuppressWarnings("unchecked")
public List getList() {
return list;
}
@SuppressWarnings("unchecked")
public void setList(List list) {
this.list = list;
}
} UserManagerImpl代码
public class UserManagerImpl implements UserManager
{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public Page queryForPage(int pageRecNum,int pageNo){
Page pageBe = new Page();
pageBe.setResultRows(userDao.pageForUserCount());
pageBe.setPageSize(pageRecNum);
pageBe.setCurrentPage(pageNo);
pageBe.init();
List<User> listus = userDao.pageForUser(pageBe.getStartRowid(),pageBe.getPageSize());
pageBe.setList(listus);
return pageBe;
}
......
}UserDao.java主要代码
@SuppressWarnings("unchecked")
public List<User> pageForUser(Integer offset, Integer pageSize)
{
String hql = "from User";
return (List<User>)pageDao.findByPage(hql,offset,pageSize);
}
public int pageForUserCount()
{
String hql = "from User";
return pageDao.getAllRowCount(hql);
}
PageDao.java主要代码
/**offset第一条记录索引pageSize 每页需要显示的记录数*/
@SuppressWarnings("unchecked")
public List findByPage(final String hql,final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**根据hql查询所有记录数*/
public int getAllRowCount(String hql)
{
return getHibernateTemplate().find(hql).size();
} User.java主要代码(对应xml文件到数据表中)
...
private int id;
private String username;
private String password;
...listView.jsp主要代码:
<s:iterator value="page.list" var="usr">
<s:property value="usr.username"/>
</s:iterator>
<hr/>
共<s:property value="page.resultRows"/> 条记录
共<s:property value="page.totalPage"/> 页
当前第<s:property value="page.currentPage"/>页<br/>
<s:if test="%{page.currentPage == 1}">
第一页 上一页
</s:if>
<s:else>
<a href="pageuser.action?page=1">第一页</a>
<a href="pageuser.action?page=<s:property value="%{page.currentPage-1}"/>">上一页</a>
</s:else>
<s:if test="%{page.currentPage != page.totalPage}">
<a href="pageuser.action?page=<s:property value="%{page.currentPage+1}"/>">下一页</a>
<a href="pageuser.action?page=<s:property value="page.totalPage"/>">最后一页</a>
</s:if>
<s:else>
下一页 最后一页
</s:else>
错误提示:
java.lang.NullPointerException
dao.impl.UserDaoImpl.pageForUserCount(UserDaoImpl.java:91)
错误就是指向:return pageDao.getAllRowCount(hql);这句
我该如何修正错误?
在applicationContext.xml中有
<bean id="pageDao" parent="daoTemplate" class="dao.impl.PageDaoImpl"/>PageDaoImpl主要代码为:package dao.impl;
import dao.PageDao;import java.util.List;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class PageDaoImpl extends HibernateDaoSupport implements PageDao
{
/**offset第一条记录索引pageSize 每页需要显示的记录数*/
@SuppressWarnings("unchecked")
public List findByPage(final String hql,final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
.......
}
/**根据hql查询所有记录数*/
public int getAllRowCount(String hql)
{
return getHibernateTemplate().find(hql).size();
}
{
return getHibernateTemplate().find(hql).size();
}
中的getHibernateTemplate().find(hql)返回的list应该为null吧
{
List list=getHibernateTemplate().find(hql);
if(list!=null){
return list.size();
}
return 0;
}