Apache Tapestry - Hibernate

Trong chương này, chúng ta sẽ thảo luận về việc tích hợp BeanEditFormGrid componentvới Hibernate. Hibernate được tích hợp vào tấm thảm thông qua mô-đun ngủ đông. Để bật mô-đun ngủ đông, hãy thêm phụ thuộc thảm trang trí-ngủ đông và tùy chọnhsqldb bên trong pom.xmltập tin. Bây giờ, hãy định cấu hình chế độ ngủ đông thông quahibernate.cfg.xml tệp được đặt ở gốc của thư mục tài nguyên.

pom.xml (một phần)

<dependency> 
   <groupId>org.apache.tapestry</groupId> 
   <artifactId>tapestry-hibernate</artifactId> 
   <version>${tapestry-release-version}</version> 
</dependency>  

<dependency> 
   <groupId>org.hsqldb</groupId> 
   <artifactId>hsqldb</artifactId> 
   <version>2.3.2</version> 
</dependency>

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC 
   "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
   <session-factory> 
      <property name = "hibernate.connection.driver_class">
         org.hsqldb.jdbcDriver
      </property> 
      <property name = "hibernate.connection.url">
         jdbc:hsqldb:./target/work/sampleapp;shutdown = true
      </property> 
      <property name = "hibernate.dialect">
         org.hibernate.dialect.HSQLDialect
      </property> 
      
      <property name = "hibernate.connection.username">sa</property> 
      <property name = "hibernate.connection.password"></property> 
      <property name = "hbm2ddl.auto">update</property>
      <property name = "hibernate.show_sql">true</property> 
      <property name = "hibernate.format_sql">true</property> 
   </session-factory> 
</hibernate-configuration>

Hãy để chúng tôi xem cách tạo employee add page bằng cách sử dụng thành phần BeanEditForm và employee list pagebằng cách sử dụng thành phần Grid. Lớp bền vững được xử lý bởi mô-đun Hibernate.

Tạo một lớp nhân viên và trang trí nó bằng chú thích @Entity. Sau đó, thêm chú thích xác thực cho các trường có liên quan và ngủ đông chú thích liên quan @Id và @GeneratedValue cho trường id. Ngoài ra, hãy tạo giới tính dưới dạng kiểu enum.

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 
}

Tạo trang danh sách nhân viên, ListEmployee.java trong thư mục mới nhân viên dưới các trang và tệp mẫu tương ứng ListEaffee.tml tại /src/main/resources/pages/employeethư mục. Tapestry cung cấp một URL ngắn cho các thư mục con bằng cách xóa dữ liệu lặp lại.

Ví dụ: có thể truy cập trang ListEaffee bằng một URL thông thường - (/ worker / listening Employee) và bằng URL ngắn - (/ worker / list).

Đưa phiên Hibernate vào trang danh sách bằng cách sử dụng chú thích @Inject. Xác định một thuộc tínhgetEmployeestrong trang danh sách và điền nó với các nhân viên sử dụng đối tượng phiên được tiêm. Hoàn thành mã cho hạng nhân viên như hình dưới đây.

ListEaffee.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<Employee> getEmployees() { 
      return session.createCriteria(Employee.class).list(); 
   } 
}

Tạo tệp mẫu cho lớp ListEaffee. Mẫu sẽ có hai thành phần chính, đó là:

  • PageLink - Tạo trang liên kết nhân viên.

  • Grid- Được sử dụng để hiển thị chi tiết nhân viên. Thành phần lưới có các thuộc tính nguồn để đưa vào danh sách nhân viên và bao gồm các thuộc tính để bao gồm các trường sẽ được hiển thị.

ListEaffee.tml (liệt kê tất cả nhân viên)

<html t:type = "simplelayout" title = "List Employee" 
   xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd"> 
   <h1>Employees</h1> 
   
   <ul> 
      <li><t:pagelink page = "employee/create">Create new employee</t:pagelink></li> 
   </ul>  
   <t:grid source = "employees" 
      include = "userName,firstName,lastName,gender,dateOfBirth,phone,city,state"/>  
</html>

Tạo tệp mẫu tạo nhân viên và bao gồm thành phần BeanEditForm. Thành phần có các thuộc tính sau:

  • object - Bao gồm nguồn.

  • reorder - Xác định thứ tự của các trường sẽ được hiển thị.

  • submitlabel - Thông báo của nút gửi biểu mẫu

Mã hóa hoàn chỉnh như sau:

<html t:type = "simplelayout" title = "Create New Address" 
   xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd">  
   <t:beaneditform  
      object = "employee"  
      submitlabel = "message:submit-label" 
      reorder = "userName,password,firstName,lastName,
      dateOfBirth,gender,email,phone,s treet,city,state,zip" />  
</html>

Tạo lớp tạo nhân viên và bao gồm phiên, thuộc tính nhân viên, trang danh sách (liên kết điều hướng) và xác định sự kiện OnSuccess (nơi cập nhật dữ liệu) của thành phần. Dữ liệu phiên được lưu vào cơ sở dữ liệu bằng phiên ngủ đông.

Mã hóa hoàn chỉnh như sau:

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; 
   } 
}

Thêm CreateEmployee.propertiesvà bao gồm thông báo được sử dụng trong xác thực biểu mẫu. Mã hoàn chỉnh như sau:

zip-regexp=^\\d{5}(-\\d{4})?$ 
zip-regexp-message = Zip Codes are five or nine digits. Example: 02134 or 901251655. 
submit-label = Create Employee

Ảnh chụp màn hình của trang tạo nhân viên và trang danh sách được hiển thị bên dưới -