我正在尝试使用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>
我的问题是:
如何将表单绑定到上面的代码?
因此,当用户输入一些姓名和姓氏时,应该调用哪种方法?
我应该在哪里放置清单2中的代码?
我希望我的问题很清楚,谢谢你的帮助。
答案 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。