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 -