收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


zhang的笔记
状态: 离线
人气:5086798
访问用户量:4227
笔记经验:
总积分:261656
级别:VIP5
搜索本笔记
ta的交流分类
ta的交流主题贴(544)
ta的所有交流贴(1049)
ta的全部笔记
全部笔记(255)
未分类笔记(1)
Java Web(9)
并发实践(1)
课程问题(0)
Java(22)
架构(1)
缓存(5)
JavaEE(0)
JVM(12)
跟我学spring3(68)
Spring Sec……(43)
Spring 3.x……(25)
Spring Sec……(20)
跟开涛学Spring……(17)
深入剖析Spring……(18)
性能调优(10)
前端(2)
Tomcat源码解读(1)
spring sec……(0)
存档
2014-01(7)
2013-12(10)
2012-10(4)
2012-09(2)
2012-08(31)
2012-07(10)
2012-06(5)
2012-05(41)
2012-04(3)
2012-03(41)
2012-02(54)
2011-11(17)
2011-10(30)

2012-02-22 17:17:42
【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3
浏览(19041)|评论(0)   交流分类:Java|笔记分类: 跟我学spring3

先进行通用配置, 【第十章】集成其它Web框架 之 10.1 概述

 

 

10.4  集成JSF

10.4.1  概述

       JSF(JavaServer Faces)框架是Java EE标准之一,是一个基于组件及事件驱动的Web框架,JSF只是一个标准(规范),目前有很多厂家实现,如Oracle的默认标准实现Mojarra、Apache的MyFaces、Jboss的RichFaces 等。

 

       本示例将使用Oracle标准实现Mojarra,请到官网http://javaserverfaces.java.net/下载最新的JSF实现。

 

       JSF目前有JSF1.1、JSF1.2、JSF2版本实现。

 

       Spring集成JSF有三种种方式:

  • 最简单集成:使用FacesContextUtils工具类的getWebApplicationContext方法,类似于Struts1x中的最简单实现;
  • VariableResolver实现:Spring提供javax.faces.el.VariableResolver的两种实现DelegatingVariableResolver和SpringBeanVariableResolver,此方式适用于JSF1.1、JSF1.2及JSF2,但在JSF1.2和JSF2中不推荐使用该方式,而是使用第三种集成方式;
  • ELResolver实现:Spring提供javax.el.ELResolver (Unified EL)实现SpringBeanFacesELResolver用于集成JSF1.2和JSF2。

 

接下来让我们首先让我们准备JSF所需要的jar包:

首先准备JSF所依赖的包:

commons-digester.jar                  //必须,已有

commons-collections.jar                //必须,已有

commons-beanutils.jar                 //必须,已有

jsp-api.jar                                   //必须,已有

servlet-api.jar                              //必须,已有                          

jstl.jar                                        //可选

standard.jar                                //可选

 

准备JSF包,到http://javaserverfaces.java.net/下载相应版本的Mojarra实现,如下载JSF1.2实现mojarra-1.2_15-b01-FCS-binary.zip,拷贝如下jar包到类路径:

lib\jsf-api.jar                           //JSF规范接口包

lib\jsf-impl.jar                          //JSF规范实现包

 

 

 

10.4.2  最简单集成

类似于Struts1x中的最简单集成,Spring集成JSF也提供类似的工具类FacesContextUtils,使用如下方式获取WebApplicationContext:

 

java代码:
WebApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
 

       当然我们不推荐这种方式,而是推荐使用接下来介绍的另外两种方式。

 

10.4.2  使用VariableResolver实现集成

Spring提供javax.faces.el.VariableResolver的两种实现DelegatingVariableResolver和SpringBeanVariableResolver,其都是Spring与JSF集成的中介者,此方式适用于JSF1.1、JSF1.2及JSF2:

  • DelegatingVariableResolver:首先委托给JSF默认VariableResolver实现去查找JSF管理Bean,如果找不到再委托给Spring容器去查找Spring管理Bean;
  • SpringBeanVariableResolver:其与DelegatingVariableResolver查找正好相反,首先委托给Spring容器去查找Spring管理Bean,如果找不到再委托给JSF默认VariableResolver实现去查找JSF管理Bean。

 

接下来看一下如何在JSF中集成Spring吧(本示例使用JSF1.2,其他版本的直接替换jar包即可):

 

1、JSF管理Bean(Managed Bean)实现:

 

java代码:
package cn.javass.spring.chapter10.jsf;
public class HelloBean {
    private String message;
    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}
 

 

2、JSF配置文件定义(resources/chapter10/jsf/faces-config.xml):

 

java代码:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" 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">
 
    <application>
        <variable-resolver>
            org.springframework.web.jsf.DelegatingVariableResolver
        </variable-resolver>
    </application>
   
    <managed-bean>
        <managed-bean-name>helloBean</managed-bean-name>
        <managed-bean-class>
            cn.javass.spring.chapter10.jsf.HelloBean
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>message</property-name>
            <value>#{message}</value>
        </managed-property>
    </managed-bean>      
</faces-config>
  • 与Spring集成:通过<variable-resolver>标签来指定集成Spring的中介者DelegatingVariableResolver;
  • 注入Spring管理Bean:通过<managed-property>标签的<value>#{message}</value>注入Spring管理Bean“message”。

 

4、JSP页面定义(webapp/hello-jsf.jsp):

 

java代码:
	
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h:outputText value="#{helloBean.message}"/>
</body>
</html>
</f:view>

 

 

5、JSF前端控制器定义,在web.xml中添加如下配置:

 

指定JSF配置文件位置,通过javax.faces.CONFIG_FILES上下文初始化参数指定JSF配置文件位置,多个可用“,”分割,如果不指定该参数则默认加载的配置文件为“/WEB-INF/ faces-config.xml”:

 

java代码:
<!-- JSF配置文件开始 -->
<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>
        /WEB-INF/classes/chapter10/jsf/faces-config-jsf1x.xml
    </param-value>
</context-param>
<!-- JSF配置文件结束 -->

 

前端控制器定义:使用FacesServlet作为JSF的前端控制器,其拦截以“.jsf”结尾的HTTP请求:

 

 

java代码:
<!-- jsf前端控制器配置开始   -->
<servlet>
    <servlet-name>jsf</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>jsf</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<!-- jsf前端控制器配置结束   -->

 

7、执行测试,在Web浏览器中输入http://localhost:8080/hello-jsf.jsp可以看到“Hello Spring”信息说明JSF集成成功。

 

自此,JSF集成Spring已经成功,在此可以把DelegatingVariableResolver替换为SpringBeanVariableResolver,其只有在查找相应依赖时顺序是正好相反的,其他完全一样。

如果您的项目使用JSF1.2或JSF2,推荐使用SpringBeanFacesELResolver,因为其实标准的Unified EL实现,而且VariableResolver接口已经被注释为@Deprecated,表示可能在以后的版本中去掉该接口。

 

10.4.2         使用ELResolver实现集成

JSF1.2之前,JSP和JSF各个使用自己的一套表达式语言(EL Language),即如JSF使用VariableResolver实现来解析JSF EL表达式,而从JSF1.2和JSP2.1开始使用Unified EL,从而统一了表达式语言。

 

因此集成JSF1.2+可以通过实现Unified EL来完成集成,即Spring提供ELResolver接口实现SpringBeanFacesELResolver用于集成使用。

类似于VariableResolver实现,通过SpringBeanFacesELResolver集成首先将从Spring容器中查找相应的Spring管理Bean,如果没找到再通过默认的JSF ELResolver实现查找JSF管理Bean。

 

接下来看一下示例一下吧:

 

1、 添加Unified EL所需要的jar包:

el-api.jar                                       //Unified EL规范接口包

 

由于在Jetty中已经包含了该api,因此该步骤可选。

 

 

2、 修改JSF配置文件(resources/chapter10/jsf/faces-config.xml):

 

将如下配置

 

java代码:
<variable-resolver>
    org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>

       

修改为:

 

java代码:
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>

 

 

3、执行测试,在Web浏览器中输入http://localhost:8080/hello-jsf.jsp可以看到“Hello Spring”信息说明JSF集成成功。

 

自此JSF与Spring集成就算结束了,是不是也很简单。

 

 

原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/0/2513.html

相关笔记推荐
精品视频课程推荐

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

ssh+jbpm项目(某集团OA)视频教程
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。 包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的taglib;示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器

Weblogic实战视频教程
WebLogic基础知识:WebLogic基本概念、正确安装WebLogic、建域、应用部署于JDBC选择、对WebLogic的监控和日志查看、集群的高可用性;课程目标:彻底掌握WebLogic的基本概念,在理解基本概念的基础上做到正确的安装WebLogic,根据不同的需求创建域,合理选择应用部署和JDBC配置。熟练掌握WebLogic的console监控,了解各种性能和运行指标,以及对监控结果的分析,运用集群的高可用性,对集群架设。

深入浅出学Spring Data JPA视频教程
系统、完整的学习Spring Data JPA开发的知识。包括:Spring Data JPA入门;JpaRepository基本功能 ;JpaRepository的查询;客户化扩展JpaRepository;Specifications查询。

浏览(19041)|评论(0)   交流分类:Java|笔记分类: 跟我学spring3

评论(0)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网