Apache Tapisserie - Ruhezustand

In diesem Kapitel werden wir über die Integration von diskutieren BeanEditForm und Grid componentmit Ruhezustand. Der Ruhezustand wird über das Ruhezustand-Modul in den Wandteppich integriert. Um das Modul für den Ruhezustand zu aktivieren, fügen Sie die Abhängigkeit von Tapisserie und Ruhezustand hinzu und optionalhsqldb in dem pom.xmlDatei. Konfigurieren Sie nun den Ruhezustand über dashibernate.cfg.xml Datei im Stammverzeichnis des Ressourcenordners.

pom.xml (teilweise)

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

Lassen Sie uns sehen, wie man das erstellt employee add page Verwenden der BeanEditForm-Komponente und der employee list pageVerwenden der Grid-Komponente. Die Persistenzschicht wird vom Hibernate-Modul verwaltet.

Erstellen Sie eine Mitarbeiterklasse und dekorieren Sie sie mit der Annotation @Entity. Fügen Sie dann eine Validierungsanmerkung für relevante Felder und eine Anmerkung für den Ruhezustand @Id und @GeneratedValue für das ID-Feld hinzu. Erstellen Sie auch das Geschlecht als Aufzählungstyp.

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 
}

Erstellen Sie die Mitarbeiterlistenseite. ListEmployee.java im neuen Ordner Mitarbeiter unter Seiten und entsprechende Vorlagendatei ListEmployee.tml unter /src/main/resources/pages/employeeMappe. Tapisserie bietet eine kurze URL für Unterordner, indem wiederholte Daten entfernt werden.

Auf die ListEmployee-Seite kann beispielsweise über eine normale URL (/ employee / listemployee) und über die kurze URL (/ employee / list) zugegriffen werden.

Fügen Sie die Sitzung im Ruhezustand mithilfe der Annotation @Inject in die Listenseite ein. Definieren Sie eine EigenschaftgetEmployeesauf der Listenseite und füllen Sie sie mit Mitarbeitern, die ein injiziertes Sitzungsobjekt verwenden. Vervollständigen Sie den Code für die Mitarbeiterklasse wie unten gezeigt.

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

Erstellen Sie die Vorlagendatei für die ListEmployee-Klasse. Die Vorlage besteht aus zwei Hauptkomponenten:

  • PageLink - Erstellen Sie eine Mitarbeiter-Link-Seite.

  • Grid- Wird zum Rendern der Mitarbeiterdetails verwendet. Die Rasterkomponente verfügt über Quellattribute zum Einfügen der Mitarbeiterliste und enthält Attribute zum Einschließen der zu rendernden Felder.

ListEmployee.tml (alle Mitarbeiter auflisten)

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

Erstellen Sie eine Vorlagendatei zur Mitarbeitererstellung und fügen Sie die BeanEditForm-Komponente hinzu. Die Komponente hat die folgenden Attribute:

  • object - Beinhaltet Quelle.

  • reorder - Definiert die Reihenfolge der zu rendernden Felder.

  • submitlabel - Die Nachricht der Schaltfläche zum Senden des Formulars

Die vollständige Codierung lautet wie folgt:

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

Erstellen Sie eine Mitarbeitererstellungsklasse und schließen Sie Sitzung, Mitarbeitereigenschaft, Listenseite (Navigationslink) ein und definieren Sie das OnSuccess-Ereignis (Ort zum Aktualisieren der Daten) der Komponente. Die Sitzungsdaten werden mithilfe der Sitzung im Ruhezustand in der Datenbank gespeichert.

Die vollständige Codierung lautet wie folgt:

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

Ergänzen Sie die CreateEmployee.propertiesDatei und fügen Sie die Nachricht hinzu, die für Formularüberprüfungen verwendet werden soll. Der vollständige Code lautet wie folgt:

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

Der Screenshot der Mitarbeitererstellungsseite und der Listenseite wird unten angezeigt -