Spring JSF集成
欢迎来到Spring JSF集成教程。JSF是一个基于组件的框架,非常注重用户界面。而Spring框架核心原则是依赖注入。因此,将JSF与Spring框架集成是有意义的,其中JSF将用于用户界面,而Spring框架将用于后端服务器端业务逻辑。
Spring JSF
Springs可以与JSF集成DelegatingVariableResolver
。现在让我们看看如何将Spring JSF框架与一个示例集成。
- 在pom.xml中添加以下spring依赖项以及标准JSF依赖项。Spring核心和Web依赖关系是基于MVC的Web应用程序的最低要求。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency>
- 在文件中添加DelegatingVariableResolver,
faces-config.xml
如下所示。这el-resolver
是委托变量解析器。<application> <el-resolver> org.springframework.web.jsf.el.SpringBeanFacesELResolver </el-resolver> </application>
提到的el-resolver
SpringBeanFacesELResolver
将JSF前端值连接到Spring后端服务层。 - 进行以下输入
web.xml
以添加spring框架提供的侦听器;<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>
监听器类将spring框架入口点绑定到servlet上下文。
我们的配置文件准备就绪,让我们看一下Spring JSF示例项目的java类。
- 创建托管bean类
CarBean.java
为package com.journaldev.jsfspring; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component @ManagedBean @SessionScoped public class CarBean { @Autowired CarDao carDao; public void setCarDao(CarDao carDao) { this.carDao = carDao; } public List<String> fetchCarDetails() { return carDao.getCarDetails(); } }
- 创建接口
CarDao.java
为package com.journaldev.jsfspring; import java.util.List; public interface CarDao { public List<String> getCarDetails(); }
- 创建实现类
CarImpl.java
为package com.journaldev.jsfspring; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; @Service public class CarImpl implements CarDao { @Override public List<String> getCarDetails() { List<String> cars = new ArrayList<String>(); cars.add(0, "Santro"); cars.add(1, "Zen"); cars.add(2, "Alto"); cars.add(3, "Qualis"); cars.add(4, "Innova"); for (String c : cars) { System.out.println(c); } return cars; } }
请注意,使用Spring注释进行服务和连线是通过@Autowired注释完成的。我们也可以使用Spring Bean配置文件来完成这些,我们将在后面的部分中看到。
让我们在JSF中创建视图页面。
- 创建JSF页面
car.xhtml
为<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head> <title>JSF Spring Integration</title> </h:head> <h:body> <h2>Car Names List</h2> <ul> <ui:repeat var="cars" value="#{carBean.fetchCarDetails()}"> <li><h3>#{cars}</h3></li> </ui:repeat> </ul> </h:body> </html>
- 添加基本软件包详细信息
applicationContext.xml
以扫描服务类。<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <context:component-scan base-package="com.journaldev.jsfspring" /> <!-- If you prefer XML based Dependency Injection remove annotation from class and uncomment below configuration --> <!-- <bean class="com.journaldev.jsfspring.CarImpl" id="carDAO" /> <bean class="com.journaldev.jsfspring.CarBean" id="carBean"> <property name="carDao" ref="carDAO"></property> </bean> --> </beans>
注意上面注释的代码,如果您更喜欢基于XML的配置,那么您可以从java类中删除Spring注释并取消注释。你会得到相同的结果。
Spring JSF示例测试
我们的应用程序已准备就绪,只需将其部署在您最喜欢的servlet容器中并运行它。你应该低于输出响应。
您可以从下面的链接下载项目并使用它来了解更多信息。