Arazzo Apache - Hibernate
In questo capitolo discuteremo dell'integrazione di BeanEditForm e Grid componentcon Hibernate. Hibernate si integra nell'arazzo tramite il modulo hibernate. Per abilitare il modulo di ibernazione, aggiungi la dipendenza tapestry-hibernate e facoltativamentehsqldb nel pom.xmlfile. Ora, configura l'ibernazione tramitehibernate.cfg.xml file posizionato nella radice della cartella delle risorse.
pom.xml (parziale)
<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>
Vediamo come creare il file employee add page utilizzando il componente BeanEditForm e il employee list pageutilizzando il componente Grid. Il livello di persistenza è gestito dal modulo Hibernate.
Crea una classe dipendente e decorala con l'annotazione @Entity. Quindi, aggiungi l'annotazione di convalida per i campi pertinenti e l'ibernazione correlata @Id e @GeneratedValue per il campo id. Inoltre, crea il genere come tipo di enumerazione.
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
}
Crea la pagina dell'elenco dei dipendenti, ListEmployee.java nella nuova cartella dipendente sotto le pagine e il file modello corrispondente ListEmployee.tml all'indirizzo /src/main/resources/pages/employeecartella. Tapestry fornisce un breve URL per le sottocartelle rimuovendo i dati ripetuti.
Ad esempio, è possibile accedere alla pagina ListEmployee tramite un normale URL - (/ dipendente / listemployee) e tramite l'URL breve - (/ dipendente / list).
Iniettare la sessione Hibernate nella pagina elenco utilizzando l'annotazione @Inject. Definisci una proprietàgetEmployeesnella pagina dell'elenco e popolarla con i dipendenti utilizzando l'oggetto sessione iniettato. Completare il codice per la classe dipendente come mostrato di seguito.
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();
}
}
Crea il file modello per la classe ListEmployee. Il modello avrà due componenti principali, che sono:
PageLink - Crea pagina di collegamento dei dipendenti.
Grid- Utilizzato per visualizzare i dettagli del dipendente. Il componente griglia ha attributi di origine per inserire l'elenco dei dipendenti e includere attributi per includere i campi da visualizzare.
ListEmployee.tml (elenca tutti i dipendenti)
<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>
Crea un file modello di creazione dei dipendenti e includi il componente BeanEditForm. Il componente ha i seguenti attributi:
object - Include la fonte.
reorder - Definisce l'ordine dei campi da renderizzare.
submitlabel - Il messaggio del pulsante di invio del modulo
La codifica completa è la seguente:
<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>
Creare la classe di creazione del dipendente e includere la sessione, la proprietà del dipendente, la pagina dell'elenco (collegamento di navigazione) e definire l'evento OnSuccess (luogo per aggiornare i dati) del componente. I dati della sessione vengono mantenuti nel database utilizzando la sessione di ibernazione.
La codifica completa è la seguente:
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;
}
}
Aggiungi il CreateEmployee.propertiesfile e includere il messaggio da utilizzare nelle convalide del modulo. Il codice completo è il seguente:
zip-regexp=^\\d{5}(-\\d{4})?$
zip-regexp-message = Zip Codes are five or nine digits. Example: 02134 or 901251655.
submit-label = Create Employee
Lo screenshot della pagina di creazione dei dipendenti e della pagina di elenco sono mostrati di seguito: