当前位置: 首页 > 知识库问答 >
问题:

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

江阳羽
2023-03-14

我正在尝试使用Hibernate在 Struts 2 的 JSP 页面中显示数据库记录。

我已经成功地完成了检索部分。

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

我尝试过互联网上的各种解决方案。但不明白问题是什么。

我可以看到表列名,但其中没有数据。

我的<code>User<code>POJO类中有所有必需的getter和setter。

我附上了我的代码:

注册操作:

public class RegisterAction extends ActionSupport{
    String name,pwd,email,address;
    int phno;

    public RegisterAction() {}

    List<User> users = new ArrayList<User>();
    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";
    }
}

用户道

public class UserDao{        

    List<User> allUsers = new ArrayList<User>();

    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<User> getUsers() {
        Session session=getSession();
        Transaction t = session.beginTransaction();
        allUsers = (List<User>)session.createQuery("from User").list();
        t.commit();
        closeSession();
        System.out.print(allUsers);
        return allUsers;
    }
}

<code>用户。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.
}

首页.jsp

<table>
    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Address</th>
        <th>Phone No</th>
    </tr>
    <s:iterator value="users">
        <tr>
            <td><s:property value="name"/></td>
            <td><s:property value="email"/></td>
            <td><s:property value="address"/></td>
            <td><s:property value="phno"/></td>
        </tr>
    </s:iterator>

</table>

struts.xml

<action name="register" class="action.RegisterAction" method="execute">
    <result name="success" type="redirect">listUsers</result>
</action>
<action name="listUsers" class="action.RegisterAction" method="listAllUsers">
    <result name="success">/home.jsp</result>
</action>

< code>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]

共有3个答案

吴凯
2023-03-14

重写到用户.java中的字符串() 方法

子车海
2023-03-14

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

雍兴修
2023-03-14

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

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

然后,您使用基于注释的映射,它也应该在配置文件中配置。

接下来,DAO 不应该扩展Hibernate实用程序,并且为会话放置静态属性是一场灾难。DAO 不应具有静态属性。如果要获取会话,请使用Hibernate工具.getSession(), 并且不要忘记在事务结束时关闭会话。我猜你仍然没有实现我在上一个答案中提出的内容,所以你不知道如何从线程中获取会话。无论如何,在构造函数中打开会话仅在首次使用会话时才有效,并且在关闭会话后它不再可用。在开始事务之前,在方法中打开会话。

接下来,ModelDriven 通过@Quaternion更好地描述,关于模型的几句话:模型仅用于查看用户,不包含用于显示用户的属性。

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

 类似资料:
  • 问题内容: 如何在JSP页面中从数据库检索和显示图像? 问题答案: 让我们逐步查看会发生什么: JSP基本上是一种视图技术,应该可以生成HTML输出。 要以HTML显示图像,你需要HTML 元素。 要使其定位图像,你需要指定其属性。 该属性需要指向有效的URL,而不是本地磁盘文件系统路径,因为当服务器和客户端在物理上不同的计算机上运行时,该路径将永远无法工作。 图片网址需要在请求路径(例如)中或作

  • 问题内容: 我想按用户ID显示数据库中的记录。这意味着工作人员必须输入工作人员ID和密码并提出新项目的请求,该请求将保存在数据库中。 该请求工作正常,但是在request.php页面之后,我想显示该工作人员在receive.php中订购的项目。我该怎么办?这是定义表的SQL: 这是receive.php的PHP代码: 我真的希望有人可以检查我的代码。提前致谢。 问题答案: 您可以通过设置会话来做到

  • 所以,数据库(MySQL)中有一个包含姓名和照片(blob)的表。在我的网页应用程序的主页上有一个按钮,点击它后-它必须是另一个页面,包含数据库的所有结果。我使用servlet/jsp/、jdbc和MVC模式,我有带有字段名称和照片(字节[])的实体User,我有返回List的DAO类,我想在结果页面上从数据库中检索每个用户照片和照片附近的他的名字。 如何使用 servlet/jsp 执行此操作?

  • 我可以通过这个代码找到所有的数据 我用下面的代码从数据库中获取数据…但是我的网页空白,我在控制台得到一些异常… 我控制台中的异常...

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于数据库记录 显示数据库记录涉及检索储存在数据库或其它内容源中的信息,以及将这些信息呈现到网页上。Dreamweaver 提供了许多显示动态内容的方法,并提供了若干内置的服务器行为,使您可以增强动态内容的表现

  • 我正在创建一个strutsHibernate应用程序。我使用hibernate查询获得了一个列表,并将其传递到action类中。但我不知道如何在JSP中显示它。 我已经在查询的基础上成功地得到了列表。现在我想用JSP显示这个列表。 我已经发布了<code>支柱。xml和用于显示结果的JSP。请检查。但在JSP中没有显示任何内容。我使用来显示列表。但没有运气。甚至我也尝试过在下打印简单文本,只是为了