Struts+Hibernate在实现一个分页,
EmployeeDao类:除了普通的get set以后,还有一个
  /**
     * 得到记录总数
     *
     * @return int - 记录总数
     */
    public  int getTotalCount() {
        Query q = getSession().createQuery("select count(*) from Employee");
        List cc = q.list();
        Integer a = (Integer) cc.get(0);
        return a.intValue();
    }
    /**
     * 分页显示数据.
     *
     * @param currentPage
                当前页码, 从 1 开始
     *
     * @param pageSize
                每页显示数据量
     *
     * @return 分页后的数据列表 - List<Student>
     */
    public List findPagedAll(int currentPage, int pageSize) {
       log.debug("分页查找");
       try {
           if (currentPage == 0) {
               currentPage = 1;
           }
           String queryString = "from Employee";
           Query queryObject = getSession().createQuery(queryString);
           queryObject.setFirstResult((currentPage - 1) * pageSize);
           queryObject.setMaxResults(pageSize);
           return queryObject.list();
       } catch (RuntimeException re) {
           log.error("find all failed", re);
           throw re;
       }
     }
pager类
package com.web.tools;import java.util.List;
import com.web.dao.*;
/**
 * 用户业务管理类
 */
public class pager{
    /** 用户管理 DAO */
     /**
     * 得到用户总数
     * @return 用户记录总数
     */
private EmployeeDAO dao = new EmployeeDAO();
 

    public int getTotalCount(){
        return dao.getTotalCount();
    }
    /**
     * 获取总页面数.
     *
     * @param pageSize
                一页显示数据量
     *
     * @return 页面总数
     */
    public int getTotalPage(int pageSize) {
        int totalCount = getTotalCount();
        // 得到页面总数
        int totalPageCount = ((totalCount + pageSize) - 1) / pageSize;
        return totalPageCount;
    }
    /**
     * 分页显示数据.
     * @param currentPage 当前页码, 从 1 开始
     * @param pageSize 每页显示数据量
     * @return 分页后的数据列表 - List<Student>
     */
    public List findPagedAll(int currentPage, int pageSize) {
        return dao.findPagedAll(currentPage, pageSize);
    }
  }listAction类:
package com.web.action;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import javax.servlet.http.*;
import org.apache.struts2.ServletActionContext;
import com.web.tools.*;
public class listAction  extends ActionSupport implements Action{

public String execute()throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
        // 分析当前页码
        String pageString=request.getParameter("page");
        if(pageString == null || pageString.length() == 0) {
            pageString = "1";
        }
        int currentPage= 0 ;
        try {
            currentPage = Integer.parseInt(pageString);// 当前页码
        } catch(Exception e) {}
        if(currentPage == 0) {
            currentPage = 1;
        }
        int pageSize = 3;    //每页显示的数据数
       
        // 读取数据
       pager manager = new pager();
        List users = manager.findPagedAll(currentPage, pageSize);
        request.setAttribute("users",users);// 保存用户列表
        request.setAttribute("totalPage",manager.getTotalPage(pageSize));// 保存总页数
        request.setAttribute("totalCount", manager.getTotalCount());//保存记录总数
        request.setAttribute("currentPage", currentPage);// 保存当前页码
        return Action.SUCCESS;
     }
 }
但是每次运行的时候,报错:
java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
请教各位原因

解决方案 »

  1.   

    看看是不是有两个EmployeeDao或两个pager类在不同的包里
      

  2.   

    这是EmployeeDAO,是直接由Hibernate反向生成的:
    public class EmployeeDAO extends BaseHibernateDAO {
    private static final Log log = LogFactory.getLog(EmployeeDAO.class);
    // property constants
    public static final String NAME = "name";
    public static final String ADDRESS = "address";
    public static final String AGE = "age";
    public static final String SEX = "sex";
    public static final String POSITION = "position"; public void save(Employee transientInstance) {
    log.debug("saving Employee instance");
    try {
    getSession().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    } public void delete(Employee persistentInstance) {
    log.debug("deleting Employee instance");
    try {
    getSession().delete(persistentInstance);
    log.debug("delete successful");
    } catch (RuntimeException re) {
    log.error("delete failed", re);
    throw re;
    }
    } public Employee findById(java.lang.Integer id) {
    log.debug("getting Employee instance with id: " + id);
    try {
    Employee instance = (Employee) getSession().get(
    "com.web.dao.Employee", id);
    return instance;
    } catch (RuntimeException re) {
    log.error("get failed", re);
    throw re;
    }
    } public List findByExample(Employee instance) {
    log.debug("finding Employee instance by example");
    try {
    List results = getSession().createCriteria("com.web.dao.Employee")
    .add(Example.create(instance)).list();
    log.debug("find by example successful, result size: "
    + results.size());
    return results;
    } catch (RuntimeException re) {
    log.error("find by example failed", re);
    throw re;
    }
    } public List findByProperty(String propertyName, Object value) {
    log.debug("finding Employee instance with property: " + propertyName
    + ", value: " + value);
    try {
    String queryString = "from Employee as model where model."
    + propertyName + "= ?";
    Query queryObject = getSession().createQuery(queryString);
    queryObject.setParameter(0, value);
    return queryObject.list();
    } catch (RuntimeException re) {
    log.error("find by property name failed", re);
    throw re;
    }
    } public List findByName(Object name) {
    return findByProperty(NAME, name);
    } public List findByAddress(Object address) {
    return findByProperty(ADDRESS, address);
    } public List findByAge(Object age) {
    return findByProperty(AGE, age);
    } public List findBySex(Object sex) {
    return findByProperty(SEX, sex);
    } public List findByPosition(Object position) {
    return findByProperty(POSITION, position);
    } public List findAll() {
    log.debug("finding all Employee instances");
    try {
    String queryString = "from Employee";
    Query queryObject = getSession().createQuery(queryString);
    return queryObject.list();
    } catch (RuntimeException re) {
    log.error("find all failed", re);
    throw re;
    }
    } public Employee merge(Employee detachedInstance) {
    log.debug("merging Employee instance");
    try {
    Employee result = (Employee) getSession().merge(detachedInstance);
    log.debug("merge successful");
    return result;
    } catch (RuntimeException re) {
    log.error("merge failed", re);
    throw re;
    }
    } public void attachDirty(Employee instance) {
    log.debug("attaching dirty Employee instance");
    try {
    getSession().saveOrUpdate(instance);
    log.debug("attach successful");
    } catch (RuntimeException re) {
    log.error("attach failed", re);
    throw re;
    }
    } public void attachClean(Employee instance) {
    log.debug("attaching clean Employee instance");
    try {
    getSession().lock(instance, LockMode.NONE);
    log.debug("attach successful");
    } catch (RuntimeException re) {
    log.error("attach failed", re);
    throw re;
    }
    }
       /**
         * 得到记录总数
         *
         * @return int - 记录总数
         */
        public  int getTotalCount() {
            Query q = getSession().createQuery("select count(*) from Employee");
            List cc = q.list();
            Integer a = (Integer) cc.get(0);
            return a.intValue();
        }
        /**
         * 分页显示数据.
         *
         * @param currentPage
                    当前页码, 从 1 开始
         *
         * @param pageSize
                    每页显示数据量
         *
         * @return 分页后的数据列表 - List<Student>
         */
        public List findPagedAll(int currentPage, int pageSize) {
           log.debug("分页查找");
           try {
               if (currentPage == 0) {
                   currentPage = 1;
               }
               String queryString = "from Employee";
               Query queryObject = getSession().createQuery(queryString);
               queryObject.setFirstResult((currentPage - 1) * pageSize);
               queryObject.setMaxResults(pageSize);
               return queryObject.list();
           } catch (RuntimeException re) {
               log.error("find all failed", re);
               throw re;
           }
         }
    }
      

  3.   

    web.xml,最原始:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
     </filter> <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
    </web-app>
      

  4.   

    struts.xml:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    <include file="struts-default.xml"/>
    <package name="Web" extends="struts-default">
    <action name="userLogin" class="com.web.action.userLoginAction">
    <result name="success">/success.jsp</result>
    <result name="input">/userLogin.jsp</result>
    <result name="error">/failed.jsp</result>
    </action>
    <action name="ls" class="com.web.action.listAction">
    <result name="success">/show.jsp</result>
    </action>
    </package>
    </struts>    
      

  5.   

    public class InvocationTargetException
    extends ExceptionInvocationTargetException 
    是一种包装由调用方法或构造方法所抛出异常的经过检查的异常。