Пример интеграции JSF 2.0 + Spring + Hibernate
Вот длинная статья, чтобы показать вам, как интегрироватьJSF 2.0,Spring иHibernate вместе. В конце статьи вы создадите страницу, которая отображает список существующих клиентов из базы данных и функцию «добавить клиента», чтобы позволить пользователю добавить нового клиента в базу данных.
P.S In this example, we are using MySQL database and deploy to Tomcat 6 web container.
1. Структура проекта
Структура каталогов этого примера


2. Скрипт таблицы
Создайте таблицу клиентов и вставьте 2 фиктивные записи.
DROP TABLE IF EXISTS `exampledb`.`customer`; CREATE TABLE `exampledb`.`customer` ( `CUSTOMER_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `NAME` varchar(45) NOT NULL, `ADDRESS` varchar(255) NOT NULL, `CREATED_DATE` datetime NOT NULL, PRIMARY KEY (`CUSTOMER_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; insert into exampledb.customer(customer_id, name, address, created_date) values(1, 'example1', 'address1', now()); insert into exampledb.customer(customer_id, name, address, created_date) values(2, 'example2', 'address2', now());
3. Спящий материал
Класс модели и файл отображения Hibernate для таблицы клиентов.
Файл: Customer.java
package com.example.customer.model;
import java.util.Date;
public class Customer{
public long customerId;
public String name;
public String address;
public Date createdDate;
//getter and setter methods
}
Файл: Customer.hbm.xml
4. Весенний материал
Spring BO и DAO классы для бизнес-логики и взаимодействия с базой данных.
Файл: CustomerBo.java
package com.example.customer.bo;
import java.util.List;
import com.example.customer.model.Customer;
public interface CustomerBo{
void addCustomer(Customer customer);
List findAllCustomer();
}
Файл: CustomerBoImpl.java
package com.example.customer.bo.impl;
import java.util.List;
import com.example.customer.bo.CustomerBo;
import com.example.customer.dao.CustomerDao;
import com.example.customer.model.Customer;
public class CustomerBoImpl implements CustomerBo{
CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
public void addCustomer(Customer customer){
customerDao.addCustomer(customer);
}
public List findAllCustomer(){
return customerDao.findAllCustomer();
}
}
Файл: CustomerDao.java
package com.example.customer.dao;
import java.util.List;
import com.example.customer.model.Customer;
public interface CustomerDao{
void addCustomer(Customer customer);
List findAllCustomer();
}
Файл: CustomerDaoImpl.java
package com.example.customer.dao.impl;
import java.util.Date;
import java.util.List;
import com.example.customer.dao.CustomerDao;
import com.example.customer.model.Customer;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class CustomerDaoImpl extends
HibernateDaoSupport implements CustomerDao{
public void addCustomer(Customer customer){
customer.setCreatedDate(new Date());
getHibernateTemplate().save(customer);
}
public List findAllCustomer(){
return getHibernateTemplate().find("from Customer");
}
}
Файл: CustomerBean.xml
5. Весна + База данных
Настроить детализацию базы данных в Spring.
Файл: db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/exampledb jdbc.username=root jdbc.password=password
Файл: DataSource.xml
WEB-INF/classes/config/database/db.properties
6. Весна + Спящий
Интегрируйте Hibernate и Spring черезLocalSessionFactoryBean.
Файл: HibernateSessionFactory.xml
7. JSF 2.0
JSF управлял bean-компонентом для вызова BO Spring, чтобы добавить или получить записи клиентов из базы данных.
Файл: CustomerBean.java
package com.example;
import java.io.Serializable;
import java.util.List;
import com.example.customer.bo.CustomerBo;
import com.example.customer.model.Customer;
public class CustomerBean implements Serializable{
//DI via Spring
CustomerBo customerBo;
public String name;
public String address;
//getter and setter methods
public void setCustomerBo(CustomerBo customerBo) {
this.customerBo = customerBo;
}
//get all customer data from database
public List getCustomerList(){
return customerBo.findAllCustomer();
}
//add a new customer data into database
public String addCustomer(){
Customer cust = new Customer();
cust.setName(getName());
cust.setAddress(getAddress());
customerBo.addCustomer(cust);
clearForm();
return "";
}
//clear form values
private void clearForm(){
setName("");
setAddress("");
}
}
Страница JSF для отображения существующих записей клиентов черезh:dataTable и несколько текстовых компонентов, позволяющих пользователю вставлять новую запись клиента в базу данных.
Файл: default.xhtml
JSF 2.0 + Spring + Hibernate Example
Customer ID
#{c.customerId}
Name
#{c.name}
Address
#{c.address}
Created Date
#{c.createdDate}
Add New Customer
Name :
Address :
8. JSF 2.0 + Spring
Интегрируйте JSF 2.0 со Spring, см. Подробное объяснение здесь -JSF 2.0 + Spring integration example
Файл: applicationContext.xml
Файл: faces-config.xml
org.springframework.web.jsf.el.SpringBeanFacesELResolver customer com.example.CustomerBean session customerBo #{customerBo}
Файл: web.xml
JavaServerFaces org.springframework.web.context.ContextLoaderListener org.springframework.web.context.request.RequestContextListener javax.faces.PROJECT_STAGE Development faces/default.xhtml Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet /faces/* Faces Servlet *.jsf Faces Servlet *.faces Faces Servlet *.xhtml
9. Demo
Запустите его, заполните данные клиента и нажмите кнопку «Отправить».


Скачать исходный код
Скачать -JSF-2-Spring-Hibernate-Integration-Example.zip (19 КБ)