10.10.2012

JSF Spring совместное ипользование.

В свое время я не нашел в интернете простого примера как связать JSF и Spring. Давайте напишем вместе простое hello world - приложение, оно будет состоять из 2 - объектов, 1-й helloWorldMessage - создается spring'om  и вставляется в jsf-объект helloWorld. Для связки 2-х технологий нужно только правильно настроить файлы конфигураций JSF и Spring. Нам понадобится - Apace Tomcat, набор библиотек jsf1.2, набор библиотек spring-framework-2.5.5:
 commons-codec.jar
 commons-logging.jar
 jsf-api.jar
 jsf-impl.jar
 jstl.jar
 jtds-1.2.4.jar
 spring-security-core-2.0.4.jar
 spring-webmvc.jar
 spring.jar
 standard.jar 

Первое нам надо, добавить org.springframework.web.context.ContextLoaderListener в  web.xml файл настройки, для того чтобы включить механизм Dependency Injection - spring'a.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">  
 
  <!-- настраиваем spring для работы -->
    <listener>
      <listener-class>
        org.springframework.web.context.ContextLoaderListener
      </listener-class>
    </listener>

 <!-- обработчик  jsf -->
    <servlet>
      <servlet-name>faces</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>faces</servlet-name>
      <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <!-- welcome-file  -->
    <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
</web-app>

По умолчанию будем использовать файл настройки spring - applicationContext.xml для конфигурирования наших bean's:
 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
        "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
    <!-- создаем bean c именем helloWorldMessage и устанавливаем его свойство message равным Hello World! Vit -->
    <bean id="helloWorldClass" class="com.vit.HelloWolrd" >
     <property name="message" value="Hello World! Vit" />
    </bean>
</beans>
Ниже привожу код объекта создаваемого spring'om:
 
package com.vit;

public class HelloWorld  {
    // наше свойство устанавливаемое spring
    private String message; 

    public HelloWorld() {
    }
    
    public String getMessage() {
        return message;
    }
    // метод вызываемый spring  при установке свойства message
    public void setMessage(String message) {
        this.message = message;
    }
}
Настроим jsf - нам нужно определить наш jsf bean делается это все в файле faces-config.xml:
 
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd" version="1.2">
    <!-- нужно вставить обработчик который передает jsf-контексту, bean'ы созданные spring'om-->
    <application>
      <variable-resolver>
        org.springframework.web.jsf.DelegatingVariableResolver
      </variable-resolver>
    </application>

    <managed-bean>
        <managed-bean-name>helloWorld</managed-bean-name>
        <managed-bean-class>
            com.jsf.HelloWorldJSF
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>hello</property-name>
            <!-- вставляем наш созданный sprin'om объект helloWorldMessage в jsf-объект класса HelloWorldJSF -->
            <value>#{helloWorldClass}</value>
        </managed-property>
    </managed-bean>
</faces-config>
Ниже привожу код класса создаваемого jsf:
 
package com.jsf;

import com.vit.HelloWolrd;

public class HelloWorldJSF {
    //свойство куда вставляется helloWorldClass-объект
    //который любезно создан sprin'om 
    HelloWolrd hello;

    public HelloWolrd getHello() {
        return hello;
    }

    public void setHello(HelloWolrd hello) {
        this.hello = hello;
    }
}
На страничке index.jsp мы переадресуем наш запрос(request) нашей jsf - страничке:
 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=success.faces">
</head>
<body>
<p>Loading ...</p>
</body>
</html>
страничка success.jsp:
 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello World</title>
</head>
<body>
<f:view>
    <h:outputLabel>The message:</h:outputLabel>
    <h:outputText value="#{helloWorld.hello.message}" />
</f:view>
</br>
 Сдесь мы перемещаемся по свойствам объектов(helloWorld.hello.message) и выводим  сообщение  The message:Hello World! Vit 
</body>
</html>
Вот и все!

Комментариев нет:

Отправить комментарий