📜  Apache Tapestry-Hibernate

📅  最后修改于: 2020-10-27 03:07:53             🧑  作者: Mango


在本章中,我们将讨论BeanEditFormGrid组件与Hibernate的集成。 Hibernate通过hibernate模块集成到挂毯中。要启用休眠模块,请在pom.xml文件中添加tapestry-hibernate依赖关系和可选的hsqldb 。现在,通过位于资源文件夹根目录下的hibernate.cfg.xml文件配置hibernate。

pom.xml(部分)

 
   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字段休眠相关的注释@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 
}

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

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

使用@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组件。该组件具有以下属性-

  • 对象-包括源。

  • 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 

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

员工创造

创建页面