📅  最后修改于: 2020-10-27 03:07:53             🧑  作者: Mango
在本章中,我们将讨论BeanEditForm和Grid组件与Hibernate的集成。 Hibernate通过hibernate模块集成到挂毯中。要启用休眠模块,请在pom.xml文件中添加tapestry-hibernate依赖关系和可选的hsqldb 。现在,通过位于资源文件夹根目录下的hibernate.cfg.xml文件配置hibernate。
org.apache.tapestry
tapestry-hibernate
${tapestry-release-version}
org.hsqldb
hsqldb
2.3.2
org.hsqldb.jdbcDriver
jdbc:hsqldb:./target/work/sampleapp;shutdown = true
org.hibernate.dialect.HSQLDialect
sa
update
true
true
让我们看看如何使用BeanEditForm组件创建雇员添加页面以及如何使用Grid组件创建雇员列表页面。持久层由Hibernate模块处理。
创建一个雇员类,并使用@Entity注释对其进行修饰。然后,为相关字段添加验证注释,并为id字段休眠相关的注释@Id和@GeneratedValue。另外,将性别创建为枚举类型。
package com.example.MyFirstApplication.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.apache.tapestry5.beaneditor.NonVisual;
import org.apache.tapestry5.beaneditor.Validate;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NonVisual
public Long id;
@Validate("required")
public String firstName;
@Validate("required")
public String lastName;
@Validate("required")
public String userName;
@Validate("required")
public String password;
@Validate("required")
public String email;
public String phone;
@Validate("required")
public String Street;
@Validate("required")
public String city;
@Validate("required")
public String state;
@Validate("required,regexp=^\\d{5}(-\\d{4})?$")
public String zip;
}
Gender.java (enum)
package com.example.MyFirstApplication.data;
public enum Gender {
Male, Female
}
在页面下的新文件夹下的employee中创建雇员列表页面ListEmployee.java ,并在/ src / main / resources / pages / employee文件夹下创建相应的模板文件ListEmployee.tml。 Tapestry通过删除重复的数据为子文件夹提供了一个简短的URL。
例如,可以通过普通URL(/ employee / listemployee)和简短URL(/ employee / list)访问ListEmployee页面。
使用@Inject注释将Hibernate会话注入列表页面。在列表页面中定义属性getEmployees ,并使用注入的会话对象将其填充为雇员。完成员工类的代码,如下所示。
package com.example.MyFirstApplication.pages.employee;
import java.util.List;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Session;
import com.example.MyFirstApplication.entities.Employee;
import org.apache.tapestry5.annotations.Import;
@Import(stylesheet="context:mybootstrap/css/bootstrap.css")
public class ListEmployee {
@Inject
private Session session;
public List getEmployees() {
return session.createCriteria(Employee.class).list();
}
}
创建ListEmployee类的模板文件。模板将包含两个主要组件,分别是-
PageLink-创建员工链接页面。
网格-用于呈现员工详细信息。网格组件具有源属性以注入员工列表,并具有属性以包含要呈现的字段。
ListEmployee.tml(列出所有员工)
Employees
Create new employee
创建员工创建模板文件,并包含BeanEditForm组件。该组件具有以下属性-
对象-包括源。
reorder-定义要渲染的字段的顺序。
Submitlabel-表单提交按钮的消息
完整的编码如下-
创建员工创建类,并包括会话,员工属性,列表页面(导航链接),并定义组件的OnSuccess事件(用于更新数据的位置)。使用休眠会话将会话数据持久化到数据库中。
完整的编码如下-
package com.example.MyFirstApplication.pages.employee;
import com.example.MyFirstApplication.entities.Employee;
import com.example.MyFirstApplication.pages.employee.ListEmployee;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Session;
public class CreateEmployee {
@Property
private Employee employee;
@Inject
private Session session;
@InjectPage
private ListEmployee listPage;
@CommitAfter
Object onSuccess() {
session.persist(employee);
return listPage;
}
}
添加CreateEmployee.properties文件,并包含要在表单验证中使用的消息。完整的代码如下-
zip-regexp=^\\d{5}(-\\d{4})?$
zip-regexp-message = Zip Codes are five or nine digits. Example: 02134 or 901251655.
submit-label = Create Employee
员工创建页面和列表页面的屏幕截图如下所示: