我应该如何在JSF + Hibernate应用程序中为简单的CRUD操作设计类?

时间:2013-05-04 19:21:45

标签: java hibernate jsf model-view-controller

我正在尝试使用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中的代码?

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

1 个答案:

答案 0 :(得分:3)

这里有一个基本的model-view-controller模式。 MyTable是您的模型,index.html是您的观点。为了将它们联系在一起,我建议添加一个类似RegistrationController的控制器类。

控制器将是托管的,视图字段将使用其“这样的属性:

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

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

因此,当用户输入名称和姓氏值时,这些值设置控制器上的属性(可以直接转换为您的MyTable对象)。然后,当单击save时,控制器上会调用save方法,该方法使用'DAO'将'MyTable'保存到DB。

您可能还想查看this tutorial