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
ภาพหน้าจอของหน้าการสร้างพนักงานและหน้ารายชื่อแสดงอยู่ด้านล่าง -