将Spring与JSF集成

为什么要将Spring与JSF集成?

Web 应用程序的表示层包含多个UI,例如:登录页面、表单页面。这些UI 能让用户与应用程序交互。
JSF 框架有助于在各种内置UI 组件的帮助下创建UI。为转换和验证用户数据提供了内置支持。提供导航和事件处理机制。最适合用于创建Web 应用程序的表示层。

创建表示层后,您需要在业务层中实现业务逻辑。业务层负责管理表示层和数据库层之间的交互。管理应用程序的事务、安全性和其他服务。JSF 框架提供受管bean 以便:从网页上的UI 组件接受值;实现事件处理程序方法;实现应用程序的业务逻辑。

JSF 受管bean 引入了复杂性,例如:分散的代码;测试困难;紧耦合的代码;用于实现应用程序主关注点的代码与用于实现系统服务的代码混合在一起。

要克服这些复杂性,您可以在业务层中实现Spring 框架以便提供一些好处,例如:对象之间的松散耦合;将应用程序的次要关注点模块化。

下图显示了通过集成JSF 和Spring 框架所开发的Web 应用程序的表示层和业务层之间的交互:

这里写图片描述

怎样将Spring与JSF集成?

Spring 和JSF 都使用bean 实现业务逻辑和处理应用程序数据。
这两个框架解析bean 值的方式有所不同:
Spring bean 在Spring 的应用程序上下文文件中定义。
JSF 受管bean 在faces-config.xml 文件中定义。
要将Spring 与JSF 集成,您需要提供一种方式,通过该方式JSF 页面可以访问在Spring 的应用程序上下文文件中定义的Spring bean。

要将Spring 框架合并到JSF 应用程序的业务层中,您需要将Spring bean 调用到JSF 环境中。
在Spring 应用程序中,通过应用程序的applicationContext.xml 文件访问Spring bean。

1.在web.xml 文件中提供applicationContext.xml 文件的映射:

当您在JSF 应用程序中添加Spring 框架时,需要在web.xml 文件中提供applicationContext.xml 文件的映射。

例如:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEBINF/applicationContext.xml</param-value>
<!--指定applicationContext.xml 文件的位置来查找bean 声明。-->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
<!--为加载Spring 应用程序上下文声明ContextLoaderListener侦听器类。-->
</listener>

2.注册变量解析器:

当执行Web 应用程序时,JSF 页面会自动搜索faces-config.xml 文件以搜索所需的bean。
要帮助JSF 页面直接从Spring 应用程序上下文文件中找到所需的bean,应使用bean 变量解析器。此bean 变量解析器在faces-config.xml 文件中声明。

为了调用在Spring 应用程序上下文中声明的Spring bean,Spring 框架提供了
org.springframework.web.jsf.DelegatingVariableResolver类。
该类在faces-config.xml 文件的<variable-resolver>标记中指定。
例如:

<application>
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
</application>

通过注册DelegatingVariableResolver,您可以从JSF 页面引用在Spring 中声明的bean。

3.在Spring 应用程序上下文文件中为其提供bean 声明

例如:

<bean id=”JsfBean” class=”JsfManagedBean” scope=”request”></bean>
<!--用JsfManagedBean类中的request作用域声明JsfBeanbean。-->

下图显示了Spring bean 如何显示到JSF 页面:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值