Struts2与Hibernate整合时无法读取数据库中的数据 2C

小弟最近学习SSH框架,遇到一个问题,同时使用Struts2和Hibernate3.6时,Action中调用hibernateUtil的方法无法获取数据,而在测试类的main()方法里却能成功调用,小弟百思不得其解,恳请各位大神指点。

关键源代码如下:

业务逻辑ShowStuAction:

 public class ShowStuAction extends ActionSupport {

    private int page ;
    private  List<Student> result;

    public static void main(String args[]){
        List<Student> result = HibernateUtil.queryByPage("select stu from Student as stu",null,2, 20);
        System.out.println(result.size());
        for(Student s: result){
            System.out.println("学号" + s.getStu_no());
            System.out.println("姓名: " + s.getStu_name());
        }
    }

    public String execute(){

        result = HibernateUtil.queryByPage("select stu from Student as stu",null,1,20);
                if(result.isEmpty()){
                    System.out.println("Result is Empty");
                }
                return "success";
        }

hibernateUtil类关键代码:

 public class HibernateUtil {

        private static SessionFactory sessionFactory;

        /**
         * @return 获取会话工厂
         */
        public static SessionFactory getSessionFactory()
        {
            //读取Hibernate的配置文件  hibernamte.cfg.xml文件
            Configuration con=new Configuration().configure();
            SessionFactory sessionFactory=con.buildSessionFactory();
            return sessionFactory;
        }

        /**
         * @return 获取会话对象
         */
        public static Session getSession()
        {
            return getSessionFactory().openSession();
        }

                 /**
         * @param <T>
         * @param sql
         * @param param
         * @param page
         * @param size
         * @return 实现分页查询
         */
        @SuppressWarnings("unchecked")
        public static <T> List<T> queryByPage(String sql,String[] param,int page,int size)
        {
            System.out.println("QueryByPage");
            List<T> list=new ArrayList<T>();
            Session session=null;
            try
            {
                session=getSession();
                Query query=session.createQuery(sql);
                if(param!=null)
                {
                    for(int i=0;i<param.length;i++)
                    {
                        query.setString(i,param[i]);
                    }
                }
                //筛选条数
                query.setFirstResult((page - 1) * size);
                query.setMaxResults(size);
                list=query.list();
                for(Object t : query.list()){
                    System.out.println("nima");
                    System.out.println(t.toString());
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                if(session!=null)
                {
                    session.close();
                }
            }

            return list;
        }

hibernate3.6配置文件

 <hibernate-configuration>
    <session-factory>
        <property name="connection.driver">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/whu</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.cache.use_second_level_cache" >false</property>

        <mapping resource="pojo/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Struts2 配置文件

 <struts>
    <constant name="struts.configuration.xml.reload" value="true" />
    <constant name="struts.devMode" value="true" />
    <package name="stu" extends="struts-default">
        <action name="showStu" class="action.ShowStuAction" method="execute">
            <result name="success" >/content/show-stu-success.jsp</result>
        </action>
    </package>

</struts>

运行时,ShowStuAction中的main()方法可以成功地获取数据,而execute()方法中的数据总是空的,后台没有报错。

7个回答

没有初始化集合,最好初始化一下,有get、set方法吗?

u012465296
橙色闪光 get 和set 方法有,我没有贴出来,ShowStuAction中的result添加了初始化,最后isEmpty还是true
接近 5 年之前 回复

private List result; 你为啥是私有的集合呢

没有报错的原因,是你没有在execute方法上面加异常抛出啊

u012465296
橙色闪光 虽然是私有的,但是我自己加了set 和get方法,视图层可以在值栈里面取到这个属性。我在后面加了throw还是没有出错信息。。
接近 5 年之前 回复

应该是你视图层有问题吧,你把视图层的代码贴出来看看

u012465296
橙色闪光 视图层的代码暂时不用去看,因为我的数据集合在后台就是空的。。。
接近 5 年之前 回复

我自己在Debug后发现根源问题在ShowStuAction调用hibernateUtil的QueryByPage方法时,query.list()语句没有取到数据,为啥就取不到尼

你直接在execute方法里输出试试看看有没有

u012465296
橙色闪光 execute方法里用isEmpty()方法试了,木有数据
接近 5 年之前 回复

Configuration con=new Configuration().configure();
改成
Configuration con=new Configuration().configure(“hibernamte.cfg.xml文件路径,从classpath开始用/隔开”);

u012465296
橙色闪光 我试了几个路径还是不行,麻烦你写出一个具体地文件路径,我在楼下放了项目包结构
接近 5 年之前 回复

out:项目编译输出目录src web 项目源代码

u012465296
橙色闪光 回复Paul_Yin_xiu: 这样还是只能main方法里获取数据,Action里还是没有。。
接近 5 年之前 回复
sky11qq
Paul_Yin_xiu Configuration con=new Configuration().configure("/hibernamte.cfg.xml");
接近 5 年之前 回复
u012465296
橙色闪光 out项目编译输出目录 src和web是源代码目录
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问