JSF与Spring的集成

JavaServer Faces (JSF) 是一个基于组件的事件驱动框架。JSF 的组件集包含一个事件发布模型、一个轻量级的 IOC 容器和很多用于几乎所有其他公共 GUI 特性的组件,这些特性包括可插入呈现、服务器端验证、数据转换、页面导航管理等等,在某些场景下,将JSF与Spring进行集成是有意义的。

由于JSF与Spring均遵循Servlet,因此二者的集成是简单的。JSF与Spring进行集成的关键类是DelegatingVariableResolver。

为了在JSF应用程序中配置这个解析器,需要修改JSF的faces-context.xml文件。在<faces-config>元素中增加<application>和<variable-resolver>元素,而其中<variable- resolver>的值必须引用Spring的DelegatingVariableResolver。示例如下:

  1. <faces-config> 
  2. <application> 
  3. <variable-resolver>org.springframework.web.                                                         jsf.DelegatingVariableResolver</variable-resolver> 
  4. <locale-config> 
  5. <default-locale>zh_CN</default-locale> 
  6. <supported-locale>en</supported-locale> 
  7. <supported-locale>zh_CN</supported-locale> 
  8. </locale-config> 
  9. <message-bundle>messages</message-bundle> 
  10. </application> 
  11. </faces-config> 

DelegatingVariableResolver类将首先在JSF实现中查找缺省的解析器,其后在Spring的WebApplicationContext中去查找,从而开发人员可以通过配置文件将对象依赖注入到JSF管理的bean。被管理的bean定义在faces-config.xml文件内。下例说明了如何从Spring的业务环境中检索名为#{userManager}的bean:

  1. <managed-bean> 
  2. <managed-bean-name>userList</managed-bean-name> 
  3. <managed-bean-class>com.example.jsf.UserList</managed-bean-class> 
  4. <managed-bean-scope>request</managed-bean-scope> 
  5. <managed-property> 
  6.   <property-name>userManager</property-name> 
  7.   <value>#{userManager}</value> 
  8. </managed-property> 
  9. </managed-bean> 

此外需要在web.xml配置文件中加入如下代码:

  1. <listener> 
  2.         <listener-class>org.springframework.web.context.                                               ContextLoaderListener</listener-class> 
  3.   </listener> 
  4.   <context-param> 
  5.       <param-name>javax.faces.CONFIG_FILES</param-name> 
  6.       <param-value> 
  7.         /WEB-INF/faces-config.xml  
  8.       </param-value> 
  9.   </context-param> 
  10.   <context-param> 
  11.       <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
  12.     <param-value>client</param-value> 
  13.   </context-param> 
  14.   <servlet> 
  15.     <servlet-name>Faces Servlet</servlet-name> 
  16.     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
  17.     <load-on-startup>1</load-on-startup> 
  18.   </servlet> 
  19.   <servlet-mapping> 
  20.     <servlet-name>Faces Servlet</servlet-name> 
  21.     <url-pattern>*.jsf</url-pattern> 
  22.   </servlet-mapping> 

注意Listener是Servlet API的V2.3版本后才引入的特性,如果使用Servlet 2.2容器,则需要使用ContextLoaderServlet来实现同样的功能。

现在网上有些关于JSF前景的争议,尤其SUN在这方面工作的滞后更令人非议。而似乎Spring的WebFlow将会更加流行。其实争议与否,就具体的应用而言,只要能够满足用户的需求即可,其余的都不是主要的因素。

【编辑推荐】

  1. Spring中XML配置文件的十二个***方法(上)
  2. Spring中XML配置文件的十二个***方法(下)
  3. 简化Spring配置文件
  4. 多种Spring.jar详解
  5. Spring框架的事务管理应用分析
免责声明:文章内容不代表本站立场,仅供读者参考。产品相关技术问题请发送工单。 本文链接:https://www.idc.net/help/411872/

为您推荐

开源数据收集引擎 Logstash 讲解和示例讲解

一、概述 Logstash 是一个开源的数据收集和日志处理工具,它是 Elastic Stack(ELK Stack)的一部分,用于从各种数据源中采集、转换和传输数据,以帮助分析和可视化大规模数据。Logstash 通常与 Elasticsearch 和 Ki...

八个开源免费单点登录(SSO)系统

单点登录(SSO)是一个登录服务层,通过一次登录访问多个应用。使用SSO服务可以提高多系统使用的用户体验和安全性,用户不必记忆多个密码、不必多次登录浪费时间。 下面推荐一些市场上最好的开源SSO系统,可作为商业SSO替代。 1.Authelia https://github.com/authelia/authelia ...

浅谈HBase数据结构和系统架构

Part 01 LSM树模型 常见的的关系型数据库,如MySQL、SQL Server、Oracle等,使用B+ Tree作为数据存储与索引的基本结构,非叶子节点只存放索引数据,叶子节点存放所有数据和指向相邻节点的指针,具有高效的范围查询和稳定的查找效率,以及具有较小的读放大和空间放大。采用磁盘随机读写方式,且以磁盘数...

微软Radius平台重构现代应用程序部署

微软的 Azure 孵化团队日前推出一个叫 Radius 的新应用平台。Radius 平台可用于在 Kubernetes、公共云和边缘环境中运行各种现代应用程序。 Radius 是一个开源项目,最初支持的应用程序运行时包括Kubernetes、Azure和AWS,以后还会支持诸如谷歌云平台等云环境。 Mark Russ...

Ext JS3.0正式版发布

Ext JS3.0在经历数次RC版之后,extjs.com终于发布3.0的正式版。总体而言,较2.0改进不大,依然还是原理的组件模型,具体更新及改进如下: ◆提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 ◆一系列的新的组件和例子,包括有图表(Charting, By YUI F...
返回顶部