Apache Tapestry - ไฮเบอร์เนต

ในบทนี้เราจะพูดถึงการรวม BeanEditForm และ Grid componentด้วย Hibernate Hibernate ถูกรวมเข้ากับ Tapestry ผ่านโมดูลไฮเบอร์เนต ในการเปิดใช้งานโมดูลไฮเบอร์เนตให้เพิ่มการพึ่งพา Tapestry-hibernate และเป็นทางเลือกhsqldb ใน pom.xmlไฟล์. ตอนนี้กำหนดค่าไฮเบอร์เนตผ่านไฟล์hibernate.cfg.xml ไฟล์ที่วางไว้ที่รากของโฟลเดอร์ทรัพยากร

pom.xml (บางส่วน)

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

ให้เราดูวิธีสร้างไฟล์ employee add page โดยใช้ส่วนประกอบ BeanEditForm และไฟล์ employee list pageโดยใช้องค์ประกอบกริด เลเยอร์ความคงอยู่ได้รับการจัดการโดยโมดูลไฮเบอร์เนต

สร้างคลาสพนักงานและตกแต่งด้วยคำอธิบายประกอบ @Entity จากนั้นเพิ่มคำอธิบายประกอบการตรวจสอบความถูกต้องสำหรับฟิลด์ที่เกี่ยวข้องและไฮเบอร์เนตคำอธิบายประกอบที่เกี่ยวข้อง @Id และ @GeneratedValue สำหรับฟิลด์ id นอกจากนี้สร้างเพศเป็นประเภท 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 
}

สร้างหน้ารายชื่อพนักงาน ListEmployee.java ในโฟลเดอร์ใหม่พนักงานภายใต้เพจและไฟล์เทมเพลตที่เกี่ยวข้อง ListEmployee.tml ที่ /src/main/resources/pages/employeeโฟลเดอร์ Tapestry จัดเตรียม URL แบบสั้นสำหรับโฟลเดอร์ย่อยโดยการลบข้อมูลซ้ำ

ตัวอย่างเช่นหน้า ListEmployee สามารถเข้าถึงได้โดย URL ปกติ - (/ workers / listemployee) และโดย URL แบบสั้น - (/ workers / list)

ใส่เซสชันไฮเบอร์เนตลงในหน้ารายการโดยใช้คำอธิบายประกอบ @Inject กำหนดคุณสมบัติ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<Employee> getEmployees() { 
      return session.createCriteria(Employee.class).list(); 
   } 
}

สร้างไฟล์เทมเพลตสำหรับคลาส ListEmployee แม่แบบจะมีองค์ประกอบหลัก 2 ส่วน ได้แก่ -

  • PageLink - สร้างหน้าลิงค์พนักงาน

  • Grid- ใช้เพื่อแสดงรายละเอียดพนักงาน คอมโพเนนต์กริดมีแอตทริบิวต์ต้นทางเพื่อแทรกรายชื่อพนักงานและรวมแอตทริบิวต์เพื่อรวมฟิลด์ที่จะแสดง

ListEmployee.tml (รายชื่อพนักงานทั้งหมด)

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

สร้างไฟล์เทมเพลตการสร้างพนักงานและรวมส่วนประกอบ BeanEditForm ส่วนประกอบมีคุณสมบัติดังต่อไปนี้ -

  • object - รวมแหล่งที่มา

  • reorder - กำหนดลำดับของฟิลด์ที่จะแสดงผล

  • submitlabel - ข้อความของปุ่มส่งแบบฟอร์ม

การเข้ารหัสที่สมบูรณ์มีดังนี้ -

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

สร้างคลาสการสร้างพนักงานและรวมเซสชันคุณสมบัติของพนักงานหน้ารายการ (ลิงก์การนำทาง) และกำหนดเหตุการณ์ 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

ภาพหน้าจอของหน้าการสร้างพนักงานและหน้ารายชื่อแสดงอยู่ด้านล่าง -