В этой главе мы обсудим интеграцию компонентов BeanEditForm и Grid с Hibernate. Hibernate интегрируется в гобелен через модуль Hibernate. Чтобы включить модуль hibernate, добавьте зависимость tapestry-hibernate и, необязательно, hsqldb в файл pom.xml . Теперь настройте hibernate с помощью файла 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>
Давайте посмотрим, как создать страницу добавления сотрудников с помощью компонента BeanEditForm и страницу списка сотрудников с помощью компонента Grid. Слой персистентности обрабатывается модулем Hibernate.
Создайте класс сотрудника и украсьте его аннотацией @Entity. Затем добавьте аннотацию проверки для соответствующих полей и аннотацию, связанную с hibernate @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 в новой папке employee под страницами и соответствующий файл шаблона ListEmployee.tml в папке / src / main / resources / pages / employee . Tapestry предоставляет короткий URL для подпапок, удаляя повторяющиеся данные.
Например, страница ListEmployee может быть открыта по обычному URL — (/ employee / listemployee) и по короткому URL — (/ employee / list).
Добавьте сеанс Hibernate на страницу списка с помощью аннотации @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. Шаблон будет состоять из двух основных компонентов:
-
PageLink — Создать страницу ссылки на сотрудников.
-
Сетка — используется для отображения данных о сотруднике. Компонент сетки имеет исходные атрибуты для добавления списка сотрудников и включает атрибуты для включения отображаемых полей.
PageLink — Создать страницу ссылки на сотрудников.
Сетка — используется для отображения данных о сотруднике. Компонент сетки имеет исходные атрибуты для добавления списка сотрудников и включает атрибуты для включения отображаемых полей.
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. Компонент имеет следующие атрибуты —
-
объект — включает в себя источник.
-
reorder — определяет порядок отображения полей.
-
submitlabel — Сообщение кнопки отправки формы
объект — включает в себя источник.
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
Снимок экрана со страницей создания сотрудника и страницей списка приведен ниже —