0% found this document useful (0 votes)
82 views11 pages

Integrating JSF 2.0 with Spring 3

This document discusses integrating JavaServer Faces (JSF) 2.0 with Spring 3 using Spring's SpringBeanFacesELResolver. It demonstrates injecting a Spring bean into a JSF managed bean through XML configuration, Spring annotations, and JSR-330 standard injection. The examples show defining a Spring bean, injecting it into a JSF managed bean using EL expression, and retrieving a value from the Spring bean in the JSF backing bean.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
82 views11 pages

Integrating JSF 2.0 with Spring 3

This document discusses integrating JavaServer Faces (JSF) 2.0 with Spring 3 using Spring's SpringBeanFacesELResolver. It demonstrates injecting a Spring bean into a JSF managed bean through XML configuration, Spring annotations, and JSR-330 standard injection. The examples show defining a Spring bean, injecting it into a JSF managed bean using EL expression, and retrieving a value from the Spring bean in the JSF backing bean.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

JSF 2 + Spring 3 integration example – [Link] [Link]

JSF 2 + Spring 3 integration example –


[Link]

mkyong

In this tutorial, we will show you how to integrate JSF 2.0 with Spring 3 using :

1. JSF XML [Link]


2. Spring annotations
3. JSR-330 standard injection

Tools and technologies used :

1. JSF 2.1.13
2. Spring [Link]
3. Maven 3
4. Eclipse 4.2
5. Tomcat 6 or 7

1. Directory Structure
A standard Maven project for demonstration.

1 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

2. Project Dependencies
Declares JSF 2, Spring 3, JSR-330 inject, and Tomcat’s dependencies.

[Link]

<project xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]

<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>JavaServerFaces</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>JavaServerFaces Maven Webapp</name>
<url>[Link]

<dependencies>

<!-- Spring framework -->


<dependency>
<groupId>[Link]</groupId>

2 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

<artifactId>spring-core</artifactId>
<version>[Link]</version>
</dependency>

<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-web</artifactId>
<version>[Link]</version>
</dependency>

<!-- JSR-330 -->


<dependency>
<groupId>[Link]</groupId>
<artifactId>[Link]</artifactId>
<version>1</version>
</dependency>

<!-- JSF -->


<dependency>
<groupId>[Link]</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.13</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.13</version>
</dependency>

<dependency>
<groupId>[Link]</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<dependency>
<groupId>[Link]</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<dependency>
<groupId>[Link]</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>

<!-- EL -->
<dependency>
<groupId>[Link]</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>

<!-- Tomcat 6 need this -->


<dependency>
<groupId>[Link]</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
</dependency>

3 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

</dependencies>

<build>
<finalName>JavaServerFaces</finalName>

<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

3. JSF 2 + Spring Integration


Spring’s bean in Spring Ioc context, and JSF’s managed bean in JSF Ioc context, how
to make both working together? The solution is defined Spring’s
SpringBeanFacesELResolver in [Link]. Check this official Spring guide.

[Link]

<?xml version="1.0" encoding="UTF-8"?>


<faces-config xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]
version="2.1">

<application>
<el-resolver>
[Link]
</el-resolver>
</application>

</faces-config>

See following 3 examples to inject Spring’s bean in JSF managed bean.

3.1. XML Schema Example


Many developers still prefer to use XML to manage beans. With
SpringBeanFacesELResolver, just uses EL ${userBo} to inject Spring’s bean into JSF’s
managed bean.

[Link]

4 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

package [Link];

public interface UserBo{

public String getMessage();

[Link]

package [Link];

import [Link];

public class UserBoImpl implements UserBo{

public String getMessage() {

return "JSF 2 + Spring Integration";

[Link] – JSF backing bean

package [Link];

import [Link];
import [Link];

public class UserBean{

//later inject in [Link]


UserBo userBo;

public void setUserBo(UserBo userBo) {


[Link] = userBo;
}

public String printMsgFromSpring() {

return [Link]();

[Link] – Declares userBo bean

<beans xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]

5 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

<bean id="userBo" class="[Link]"></bean>

</beans>

[Link] – Declares managed bean and inject userBo

<?xml version="1.0" encoding="UTF-8"?>


<faces-config
xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]
version="2.0">

<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>[Link]</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>userBo</property-name>
<value>#{userBo}</value>
</managed-property>
</managed-bean>

</faces-config>

3.2. Spring Annotations – Auto Scan


This example is using Spring annotations. Injects like a normal bean with
@ManagedBean, @Autowired and @Component, it just works as expected.

[Link]

package [Link];

import [Link];
import [Link];

@Service
public class UserBoImpl implements UserBo{

public String getMessage() {

return "JSF 2 + Spring Integration";

[Link]

package [Link];

6 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

@Component
@ManagedBean
@SessionScoped
public class UserBean{

@Autowired
UserBo userBo;

public void setUserBo(UserBo userBo) {


[Link] = userBo;
}

public String printMsgFromSpring() {


return [Link]();
}

[Link] – Enable the component auto scan

<beans xmlns="[Link]
xmlns:xsi="[Link]
xmlns:context="[Link]
xsi:schemaLocation="[Link]
[Link]
[Link]
[Link]

<context:component-scan base-package="[Link]" />

</beans>

Mixed use of both JSF and Spring annotations are working fine, but it look weird
and duplicated – @Component and @ManagedBean together. Actually, you can just uses a
single @Component, see following new version, it’s pure Spring, and it works!

[Link]

package [Link];

import [Link];
import [Link];
import [Link];

import [Link];

@Component
@Scope("session")
public class UserBean{

7 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

@Autowired
UserBo userBo;

public void setUserBo(UserBo userBo) {


[Link] = userBo;
}

public String printMsgFromSpring() {


return [Link]();
}

3.3. JSR-330 Annotation


Since Spring 3.0, Spring offer supports for JSR-330 injection standard. Now, you can
uses @Inject to replace for @Autowired and @Named for @Component. This is
recommended to solution, follow JSR-330 standard make the application more
portable to other environments, and it works fine in Spring framework.

[Link]

package [Link];

import [Link];
import [Link];

@Named
public class UserBoImpl implements UserBo{

public String getMessage() {

return "JSF 2 + Spring Integration";

[Link]

package [Link];

import [Link];
import [Link];
import [Link];
import [Link];

@Named
@Scope("session") //need this, JSR-330 in Spring context is singleton by default
public class UserBean {

@Inject
UserBo userBo;

8 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

public void setUserBo(UserBo userBo) {


[Link] = userBo;
}

public String printMsgFromSpring() {


return [Link]();
}

[Link] – Need component auto scan also

<beans xmlns="[Link]
xmlns:xsi="[Link]
xmlns:context="[Link]
xsi:schemaLocation="[Link]
[Link]
[Link]
[Link]

<context:component-scan base-package="[Link]" />

</beans>

4. Demo
Example in 3.1, 3.2 and 3.3 are doing exactly the thing – Inject userBo into JSF bean,
just different implementation. Now, create a simple JSF page to show the the result.

[Link]

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[Link]
<html xmlns="[Link]
xmlns:h="[Link]
>

<h:body>

<h1>JSF 2.0 + Spring Example</h1>

#{[Link]()}

</h:body>

</html>

[Link]

<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns:xsi="[Link]

9 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

xmlns="[Link]
xmlns:web="[Link]
xsi:schemaLocation="[Link]
[Link]
id="WebApp_ID" version="2.5">

<display-name>JavaServerFaces</display-name>

<!-- Add Support for Spring -->


<listener>
<listener-class>
[Link]
</listener-class>
</listener>
<listener>
<listener-class>
[Link]
</listener-class>
</listener>

<!-- Change to "Production" when you are ready to deploy -->


<context-param>
<param-name>[Link].PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

<!-- Welcome page -->


<welcome-file-list>
<welcome-file>[Link]</welcome-file>
</welcome-file-list>

<!-- JSF Mapping -->


<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

</web-app>

Done, see output : [Link]

10 of 11 11/10/18, 10:36 PM
JSF 2 + Spring 3 integration example – [Link] [Link]

Download Source Code


References
1. Spring reference – SpringBeanFacesELResolver
2. Spring how to do dependency injection in your session listener
3. Spring 3 and JSR-330 @Inject and @Named example

11 of 11 11/10/18, 10:36 PM

You might also like