开发手册 欢迎您!
软件开发者资料库

Apache Tapestry - Hibernate

Apache Tapestry Hibernate - 从简单和简单的步骤学习Apache Tapestry,从基本到高级概念,包括概述,体系结构,安装,快速入门,项目布局,约定配置,注释,页面和组件,模板,组件,内置,表单和验证,Ajax组件,休眠,存储,高级功能。

在本章中,我们将讨论 BeanEditForm 网格组件与Hibernate的集成. Hibernate通过hibernate模块集成到tapestry中.要启用hibernate模块,请在 pom.xml 文件中添加tapestry-hibernate依赖项和 hsqldb .现在,通过位于资源文件夹根目录下的 hibernate.cfg.xml 文件配置hibernate.

pom.xml(partial)

    org.apache.tapestry    tapestry-hibernate    ${tapestry-release-version}       org.hsqldb    hsqldb    2.3.2 

Hibernate.cfg.xml

                     org.hsqldb.jdbcDriver                      jdbc:hsqldb:./target/work/sampleapp;shutdown = true                      org.hibernate.dialect.HSQLDialect                   sa              update      true       true     

让我们看看如何使用BeanEditForm组件和员工列表页面员工添加页面>使用Grid组件.持久层由Hibernate模块处理.

创建一个雇员类并使用@Entity注释对其进行修饰.然后,为相关字段添加验证注释,并为id字段添加hibernate相关注释@Id和@GeneratedValue.另外,将性别设置为枚举类型.

Employee.java

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 }

创建员工列表页面, ListEmployee.java 在页面下的新文件夹employee和/src/main/resources/pages/employee 文件夹中的相应模板文件ListEmployee.tml中. Tapestry通过删除重复数据为子文件夹提供了一个简短的URL.

例如,ListEmployee页面可以通过普通URL(/employee/listemployee)和短URL访问 - (/employee/list).

使用@Inject注释将Hibernate会话注入列表页面.在列表页面中定义属性 getEmployees ,并使用注入的会话对象向员工填充该属性.完成员工类的代码,如下所示.

ListEmployee.java

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组件.该组件具有以下属性 :

  • object : 包括来源.

  • 重新排序 : 定义要渲染的字段的顺序.

  • submitlabel : 表单提交按钮的消息

完整的编码如下 :

       

创建员工创建类并包括会话,员工属性,列表页面(导航链接)并定义组件的OnSuccess事件(更新数据的位置) .会话数据使用hibernate会话持久保存到数据库中.

完整的编码如下 :

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

员工创建页面和列表页面的屏幕截图如下所示 :

员工创建


创建页面