Пример интеграции JSF 2.0 + Spring + Hibernate

Пример интеграции 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. Структура проекта

Структура каталогов этого примера

jsf2-spring-hibernate-folder-1

jsf2-spring-hibernate-folder-2

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







    
      
    

    
       
         org.hibernate.dialect.MySQLDialect
         true
       
    

    
    
          com/example/customer/hibernate/Customer.hbm.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

Запустите его, заполните данные клиента и нажмите кнопку «Отправить».

jsf2-spring-hibernate-example-1

jsf2-spring-hibernate-example-2

Скачать исходный код

Related