Статьи

JSF — PrimeFaces & Hibernate Интеграционный проект

В этой статье показано, как разработать проект с использованием JSF, PrimeFaces и Hibernate. Пример приложения ниже:

Используемые технологии:

JDK 1.6.0_21
Maven 3.0.2
JSF 2.0.3
PrimeFaces 2.2.1
Hibernate 3.6.7
MySQL Java Connector 5.1.17
MySQL 5.5.8
Apache Tomcat 7.0

ШАГ 1: СОЗДАТЬ ТАБЛИЦУ ПОЛЬЗОВАТЕЛЯ

Новая таблица USER создается с помощью следующего скрипта:

1
2
3
4
5
6
CREATE TABLE USER (
   id int(11) NOT NULL,
   name varchar(45) NOT NULL,
   surname varchar(45) NOT NULL,
   PRIMARY KEY (`id`)
);

ШАГ 2: СОЗДАТЬ MAVEN ПРОЕКТ

Maven проект создается как показано ниже. (Его можно создать с помощью Maven или IDE Plug-in).

ШАГ 3: БИБЛИОТЕКИ

JSF, Hibernate и библиотеки зависимостей добавляются в pom.xml Maven. Эти библиотеки будут загружены Центральным репозиторием Maven.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!-- JSF library -->
<dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-api</artifactId>
   <version>2.0.3</version>
</dependency>
<dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-impl</artifactId>
   <version>2.0.3</version>
</dependency>
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
</dependency>
<!-- Hibernate library -->
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>3.6.7.Final</version>
</dependency>
<dependency>
   <groupId>javassist</groupId>
   <artifactId>javassist</artifactId>
   <version>3.12.1.GA</version>
</dependency>
<!-- MySQL Java Connector library -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.17</version>
</dependency>
<!-- Log4j library -->
<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version>
</dependency>

Примечание: primefaces-2.2.1.jar также можно скачать по ссылке maven или ниже:

01
02
03
04
05
06
07
08
09
10
11
12
<repository>
   <id>prime-repo</id>
   <name>PrimeFaces Maven Repository</name>
   <layout>default</layout>
</repository
 
<dependency>
   <groupId>org.primefaces</groupId>
   <artifactId>primefaces</artifactId>
   <version>2.2.1</version>
</dependency>

или же

http://www.primefaces.org/downloads.html

ШАГ 4: СОЗДАТЬ КУЛЬТУРУ БИЛЛА

Создан новый класс управляемых бинов. Этот компонент используется, который может быть связан с компонентами пользовательского интерфейса. Управляемые компоненты содержат свойства, методы получения и установки. Также они могут охватывать методы обработки событий, навигации, проверки и т. Д.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.otv;
 
import java.io.Serializable;
import java.util.List;
 
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;
 
import com.otv.hbm.User;
import com.otv.util.HibernateUtil;
 
/**
 * @author onlinetechvision.com
 * @since 3 Oct 2011
 * @version 1.0.0
 *
 */
public class UserManagedBean implements Serializable{
 
 private static final long serialVersionUID = 1L;
 private static Logger log = Logger.getLogger(UserManagedBean.class);
 private static final String SUCCESS = 'success';
 private static final String ERROR   = 'error';
 private String name;
 private String surname;
 private String message;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSurname() {
  return surname;
 }
 public void setSurname(String surname) {
  this.surname = surname;
 }
 
 public String getMessage() {
  StringBuffer strBuff = new StringBuffer();
  strBuff.append('Name : ').append(this.getName());
  strBuff.append(', Surname : ').append(this.getSurname());
  this.setMessage(strBuff.toString());
  return this.message;
 }
 
 public void setMessage(String message) {
  this.message = message;
 }
 
 public String save() {
  String result = null;
  Session session = HibernateUtil.getSessionFactory().openSession();
 
  User user = new User();
  user.setName(this.getName());
  user.setSurname(this.getSurname());
 
  Transaction tx = null;
 
  try {
   tx = session.beginTransaction();
   session.save(user);
   tx.commit();
   log.debug('New Record : ' + user + ', wasCommitted : ' + tx.wasCommitted());
   result = SUCCESS;
  } catch (Exception e) {
   if (tx != null) {
    tx.rollback();
    result = ERROR;
    e.printStackTrace();
   }
  } finally {
   session.close();
  }
  return result;
 }
 
 public List<User> getUsers() {
  Session session = HibernateUtil.getSessionFactory().openSession();
  List<User>  userList = session.createCriteria(User.class).list();
  return userList;
 }
 
 public void reset() {
  this.setName('');
  this.setSurname('');
 }
}

ШАГ 5: СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЬСКИЙ КЛАСС

Новый класс User создан для моделирования User Table.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.otv.hbm;
/**
 * @author onlinetechvision.com
 * @since 3 Oct 2011
 * @version 1.0.0
 *
 */
public class User {
 
 private int id;
 private String name;
 private String surname;
 
 public int getId() {
  return id;
 }
 
 public void setId(int id) {
  this.id = id;
 }
 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 public String getSurname() {
  return surname;
 }
 
 public void setSurname(String surname) {
  this.surname = surname;
 }
 
 @Override
 public String toString() {
  StringBuffer strBuff = new StringBuffer();
  strBuff.append('id : ').append(id);
  strBuff.append(', name : ').append(name);
  strBuff.append(', surname : ').append(surname);
  return strBuff.toString();
 }
}

ШАГ 6: СОЗДАТЬ КЛАСС HIBERNATEUTIL

Класс Singleton HibernateUtil создан для создания объекта Hibernate SessionFactory.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.otv.util;
 
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
/**
 * @author onlinetechvision.com
 * @since 3 Oct 2011
 * @version 1.0.0
 *
 */
public class HibernateUtil {
 
 private static SessionFactory sessionFactory = null;
 
 public static SessionFactory getSessionFactory() {
  if(sessionFactory == null) {
   sessionFactory = new Configuration().configure().buildSessionFactory();
  }
  return sessionFactory;
 }
 
 public static void setSessionFactory(SessionFactory sessionFactory) {
  HibernateUtil.sessionFactory = sessionFactory;
 }
 
}

ШАГ 7: СОЗДАТЬ index.xhtml

index.xhtml создан.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     xmlns:h='http://java.sun.com/jsf/html'
      xmlns:f='http://java.sun.com/jsf/core'
     xmlns:p='http://primefaces.prime.com.tr/ui'
 
 <h:head><title>Welcome to JSF_PrimeFaces_Hibernate Project</title></h:head>
 <body>
     <h:form>
      <table>
       <tr>
        <td><h:outputLabel for='name' value='Name:' /></td>
        <td><p:inputText id='name' value='#{userMBean.name}'/></td>
       </tr>
       <tr>
        <td><h:outputLabel for='surname' value='Surname:' /></td>
        <td><p:inputText id='surname' value='#{userMBean.surname}'/> </td>
       </tr>
          <tr>
        <td><p:commandButton id='submit' value='Save' action='#{userMBean.save}' ajax='false'/></td>
        <td><p:commandButton id='reset' value='Reset' action='#{userMBean.reset}' ajax='false'/></td>
       </tr>
      </table>
     </h:form>
</body>
</html>

ШАГ 8: СОЗДАТЬ welcome.xhtml

welcome.xhtml создан.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
<h:head>
 <title>Welcome to JSF_PrimeFaces_Hibernate Project</title>
</h:head>
<body>
 <h:form>
  <h:outputText value='Saved Record is #{userMBean.message}'></h:outputText>
  <p:dataTable id='users' value='#{userMBean.getUsers()}' var='user' style='width: 10%'>
   <p:column>
    <f:facet name='header'>
     <h:outputText value='ID' />
    </f:facet>
    <h:outputText value='#{user.id}' />
   </p:column>
   <p:column>
    <f:facet name='header'>
     <h:outputText value='Name' />
    </f:facet>
    <h:outputText value='#{user.name}' />
   </p:column>
   <p:column>
    <f:facet name='header'>
     <h:outputText value='Surname' />
    </f:facet>
    <h:outputText value='#{user.surname}' />
   </p:column>
  </p:dataTable>
 </h:form>
</body>
</html>

ШАГ 9: СОЗДАЙТЕ error.xhtml

error.xhtml создан.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
     xmlns:h='http://java.sun.com/jsf/html'
     xmlns:f='http://java.sun.com/jsf/core'
     xmlns:p='http://primefaces.prime.com.tr/ui'
 
 <h:head><title>Welcome to JSF_PrimeFaces_Hibernate Project</title></h:head>
 <body>
 <f:view>
     <h:form>
         <h:outputText value='Transaction Error has occurred!'></h:outputText>
     </h:form>
 </f:view>
</body>
</html>

ШАГ 10: НАСТРОЙКА face-config.xml

Face-config.xml создается как показано ниже. Он охватывает настройку управляемых bean-компонентов и навигацию между страницами xhtml.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version='1.0' encoding='UTF-8'?>
<faces-config
    xsi:schemaLocation='http://java.sun.com/xml/ns/javaee
 
 
    version='2.0'>
 
 <managed-bean>
  <managed-bean-name>userMBean</managed-bean-name>
  <managed-bean-class>com.otv.UserManagedBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
 
 <navigation-rule>
     <from-view-id>/pages/index.xhtml</from-view-id>
     <navigation-case>
         <from-outcome>success</from-outcome>
            <to-view-id>/pages/welcome.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
         <from-outcome>error</from-outcome>
            <to-view-id>/pages/error.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

ШАГ 11: ОБНОВЛЕНИЕ web.xml

web.xml обновляется.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version='1.0' encoding='UTF-8'?>
 id='WebApp_ID'
 version='2.5'>
   <display-name>OTV_JSF_PrimeFaces_Hibernate</display-name>
   <context-param>
     <param-name>javax.faces.PROJECT_STAGE</param-name>
     <param-value>Development</param-value>
   </context-param>
   <welcome-file-list>
     <welcome-file>/pages/index.xhtml</welcome-file>
   </welcome-file-list>
   <servlet>
     <servlet-name>Faces Servlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>/faces/*</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.faces</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.xhtml</url-pattern>
   </servlet-mapping>
</web-app>

ШАГ 12: СОЗДАТЬ user.hbm.xml

Конфигурация таблицы пользователя установлена.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?xml version='1.0'?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
 
<hibernate-mapping>
  <class name='com.otv.hbm.User' table='USER'>
   <id name='id' type='int' column='ID' >
   <generator class='increment'/>
  </id>
 
  <property name='name'>
    <column name='NAME' />
  </property>
  <property name='surname'>
    <column name='SURNAME'/>
  </property>
 </class>
</hibernate-mapping>

ШАГ 13: СОЗДАЙТЕ hibernate.cfg.xml

hibernate.cfg.xml создан для управления взаимодействием между приложением и базой данных:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    '-//Hibernate/Hibernate Configuration DTD//EN'
 
<hibernate-configuration>
<session-factory>
  <property name='hibernate.connection.driver_class'>com.mysql.jdbc.Driver</property>
  <property name='hibernate.connection.url'>jdbc:mysql://localhost:3306/Test</property>
  <property name='hibernate.connection.username'>root</property>
  <property name='hibernate.connection.password'>root</property>
  <property name='hibernate.connection.pool_size'>10</property>
  <property name='show_sql'>true</property>
  <property name='dialect'>org.hibernate.dialect.MySQLDialect</property>
  <!-- Mapping files -->
  <mapping resource='hbm/user.hbm.xml'/>
</session-factory>
</hibernate-configuration>

ШАГ 14: ЗАДЕРЖКА ПРОЕКТА СЕРВЕРУ ПРИЛОЖЕНИЯ

Когда Project развернут на сервере приложений (Apache tomcat), экран будет выглядеть следующим образом:

После нажатия кнопки «Отправить» страница welcome.xhtml будет выглядеть следующим образом:

ШАГ 15: СКАЧАТЬ

OTV_JSF_Hibernate_PrimeFaces

Ссылка: JSF — проект интеграции PrimeFaces & Hibernate от нашего партнера JCG Эрен Авсарогуллари в блоге Online Technology Vision .