Apache Tapestry - Hazırda beklet

Bu bölümde, entegrasyon hakkında tartışacağız. BeanEditForm ve Grid componentHazırda bekletme ile. Hazırda bekletme, hazırda bekletme modülü aracılığıyla duvar halısına entegre edilir. Hazırda bekletme modülünü etkinleştirmek için, tapestry-hibernate bağımlılığı ekleyin ve isteğe bağlı olarakhsqldb içinde pom.xmldosya. Şimdi, hazırda bekletme modunuhibernate.cfg.xml dosya, kaynak klasörün kök dizinine yerleştirilir.

pom.xml (kısmi)

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

Nasıl oluşturulacağını görelim employee add page BeanEditForm bileşenini ve employee list pageGrid bileşenini kullanarak. Kalıcılık katmanı Hazırda Bekletme modülü tarafından işlenir.

Bir çalışan sınıfı oluşturun ve onu @ Entity notuyla süsleyin. Ardından, ilgili alanlar için doğrulama ek açıklaması ekleyin ve ilgili açıklama @Id ve id alanı için @GeneratedValue hazırda bekletin. Ayrıca, enum türü olarak cinsiyeti oluşturun.

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 
}

Çalışan listesi sayfasını oluşturun, ListEmployee.java yeni klasörde, sayfalar ve ilgili şablon dosyası ListEmployee.tml altında /src/main/resources/pages/employeeKlasör. Tapestry, tekrarlanan verileri kaldırarak alt klasörler için kısa bir URL sağlar.

Örneğin, ListEmployee sayfasına normal bir URL - (/ çalışan / listemployee) ve kısa URL - (/ çalışan / liste) ile erişilebilir.

@ Enjekte notunu kullanarak Hazırda Bekletme oturumunu liste sayfasına enjekte edin. Bir mülk tanımlayıngetEmployeesliste sayfasında ve enjekte edilmiş oturum nesnesini kullanan çalışanlarla doldurun. Çalışan sınıfı kodunu aşağıda gösterildiği gibi doldurun.

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 sınıfı için şablon dosyası oluşturun. Şablonun iki ana bileşeni olacaktır:

  • PageLink - Çalışan bağlantı sayfası oluşturun.

  • Grid- Çalışan detaylarını işlemek için kullanılır. Izgara bileşeni, çalışan listesi enjekte etmek için kaynak özniteliklerine sahiptir ve işlenecek alanları içerecek öznitelikleri içerir.

ListEmployee.tml (tüm çalışanları listeleyin)

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

Çalışan oluşturma şablon dosyası oluşturun ve BeanEditForm bileşenini dahil edin. Bileşen aşağıdaki özniteliklere sahiptir -

  • object - Kaynak içerir.

  • reorder - Oluşturulacak alanların sırasını tanımlar.

  • submitlabel - Form gönderme düğmesinin mesajı

Tam kodlama aşağıdaki gibidir -

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

Çalışan oluşturma sınıfı oluşturun ve bileşenin oturumu, çalışan özelliğini, liste sayfasını (gezinme bağlantısı) dahil edin ve OnSuccess olayını (verilerin güncelleneceği yer) tanımlayın. Oturum verileri, hazırda bekletme oturumu kullanılarak veritabanında saklanır.

Tam kodlama aşağıdaki gibidir -

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

Ekle CreateEmployee.propertiesdosya ve form doğrulamalarında kullanılacak mesajı ekleyin. Kodun tamamı aşağıdaki gibidir -

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

Çalışan oluşturma sayfasının ve listeleme sayfasının ekran görüntüsü aşağıda gösterilmiştir -