如何在Struts 2中显示数据库记录列表(通过Hibernate检索)到JSP页面?

我正在尝试使用Hibernate将数据库记录显示在Struts 2中的JSP页面中。 我成功完成了检索部分。

但无论我做什么,我似乎都无法在JSP页面中显示数据。

我试过在互联网上找到各种解决方案。 但无法理解什么似乎是问题。 我可以看到表列名,但它没有数据。 我在用户POJO课程中拥有所有必需的getter和setter。

我附上了我的代码:

注册行动:

public class RegisterAction extends ActionSupport{ String name,pwd,email,address; int phno; public RegisterAction() {} List users = new ArrayList(); UserDao udao = new UserDao(); //Getters and setters. public String execute() throws Exception { User u=new User(); u.setName(name); u.setEmail(email); u.setAddress(address); u.setPhno(phno); u.setPwd(pwd); udao.addUser(u); return "success"; } public String listAllUsers(){ users = udao.getUsers(); System.out.println("In Action, "+users); return "success"; } } 

UserDao

 public class UserDao{ List allUsers = new ArrayList(); public UserDao() {} //Getter and setter. public Session getSession(){ return HibernateUtil.getSession(); } public void closeSession(){ HibernateUtil.closeSession(); } public void addUser(User u) { Session session= getSession(); Transaction t = session.beginTransaction(); int i = (Integer)session.save(u); t.commit(); closeSession(); } public List getUsers() { Session session=getSession(); Transaction t = session.beginTransaction(); allUsers = (List)session.createQuery("from User").list(); t.commit(); closeSession(); System.out.print(allUsers); return allUsers; } } 

User.java //实体类:

 @Entity @Table(name="tbl_user") public class User { @Id @GeneratedValue @Column(name="user_id") private int id; @Column(name="user_phno") int phno; @Column(name="user_name") private String name; @Column(name="user_pwd") private String pwd; @Column(name="user_email") private String email; @Column(name="user_address") private String address; public User(){} public User(String name,String pwd,String email,String address,int phno){ this.name = name; this.pwd = pwd; this.email = email; this.address =address; this.phno = phno; } //Getters and setters. } 

home.jsp

  
Name Email Address Phone No

struts.xml

  listUsers   /home.jsp  

HibernateUtil

 public class HibernateUtil { static SessionFactory sessionFactory; static Session session; public static Session getSession() { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); session= sessionFactory.openSession(); return session; } public void setSession(Session session) { this.session = session; } public static void closeSession(){ session.close(); } } 

服务器日志包含

 [models.User@9c0fad, models.User@1c94f2c, models.User@16d06ef] INFO: In Action, [models.User@9c0fad, models.User@1c94f2c, models.User@16d06ef] 

可能你理解,但不知道为什么你没有尝试解决它。 如果要显示数据,首先应将其放在数据库中。 检查数据是否可用,通过客户端应用程序连接到它。 有许多方法可以连接到数据库,包括随IDE提供的JDBC客户端应用程序。 它还可以直接从hibernate.cfg.xml获取连接属性,并具有测试连接的能力。 此外,请确保用于连接到数据库的凭据具有对应该可能手动创建的架构的DML / DDL访问权限。

这个文件用于hibernate配置,你应该注意它,因为对应于hibernate版本的正确 DTD才有效。

然后,您正在使用基于注释的映射,并且还应在配置文件中进行配置。

接下来,DAO不应该扩展HibernateUtil并为session设置static属性是一个灾难。 DAO不应该具有static属性。 如果你想获得一个会话使用HibernateUtil.getSession()并且不要忘记在事务结束时关闭会话。 我猜你还没有实现我在上一个答案中提出的建议,所以你不知道如何从线程中获取会话。 无论如何在构造函数中打开一个会话只能在你第一次使用会话时工作,并且在你关闭它之后它不再可用。 在开始事务之前在方法中打开会话。

接下来, ModelDriven更好地描述了ModelDriven,关于您的模型的几句话:您的模型仅用于查看user ,并且不包含显示users属性。

最后,方法execute是操作配置使用的默认方法,除非您知道自己在做什么,否则不应映射此方法。

我发现你的jsp列表的属性名称和动作类的变量名称应该匹配。 根据我的理解,这应该解决你的问题…..!

覆盖User.java中的toString()方法