1

我正在尝试使用 JSF 和 Hibernate 学习 Web 编程。

我的 MySQL 服务器中有一个名为mytable的表,它有 2 列:名称、姓氏

我还有一个映射到这个表的 MyTable.java,它看起来像这样:

// Listing 1
public class MyTable {

    private String name;
    private String surname;

    public MyTable() {
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}

这是通过 Hibernate 映射的,因此这段代码(我已用于测试目的)成功地将数据插入到 mytable:

    //Listing 2
    Session session = HibernateUtil.getSessionFactory().openSession();

    session.beginTransaction();

    MyTable myTable = new MyTable();

    myTable.setName("Name");
    myTable.setSurname("Surname");

    session.save(myTable);

    session.getTransaction().commit();

这就是我在 index.xhtml 上的表单的样子:

// Listing 3
<h:form id="registirationForm" prependId="false">

    <h:outputLabel for="name">Name:</h:outputLabel>
    <h:inputText id="name"></h:inputText>

    <h:outputLabel for="surname">Surname:</h:outputLabel>
    <h:inputText id="surname"></h:inputText>

</h:form>

我的问题是:

如何将我的表单与上面的代码联系起来?

  • 我是否应该让 MyTable 类成为托管 bean,并放置一个名为saveRecord的方法并将上面的代码放在那里?
  • 它应该映射到其他类吗?如果是这样应该叫什么?我应该将当前 MyTable.java 的名称更改为 MyTableDao.Java 之类的名称吗?

那么当用户输入一些名字和姓氏时,应该调用什么方法呢?

我应该将清单 2 中的代码放在哪里?

我希望我的问题很清楚,感谢您的帮助。

4

1 回答 1

3

您在这里有一个基本的模型-视图-控制器模式。MyTable是你的模型,index.html是你的观点。要将它们联系在一起,我建议添加一个控制器类,例如RegistrationController.

控制器将是托管的,视图字段将使用它的属性,如下所示:

<h:outputLabel for="name">Name:</h:outputLabel>
<h:inputText id="name" value="#{registrationController.userName}"></h:inputText>

控制器还将包含 save 方法。您还可以添加一个 DAO 对象,就像您建议的那样,将持久性细节与业务逻辑(应该在控制器中)分开。

因此,当用户输入姓名和姓氏值时,它们会在控制器上设置属性(可能会直接转换为您的MyTable对象)。然后,当单击保存时,save会在控制器上调用一个方法,该方法使用“DAO”将“MyTable”持久保存到数据库。

您可能还想查看本教程

于 2013-05-04T19:40:17.613 回答