在JSF中整合Spring
来源:互联网 发布:陌陌网络请求失败 编辑:程序博客网 时间:2024/04/28 20:58
JSF本身对于Bean的管理有依赖注入的功能,不过Spring的IoC容器提供更多的功能,另一方面Spring还有AOP框架,在事务处理上也可以帮的上忙。
JSF与Spring的结合,主要目的就是让Spring的Bean名称可以被JSF视作为<managed-bean-name>标签上的名称来使用,也就是当您在JSF定义档中根据一个名称要求一个Bean实例时,若JSF在自己的 Context中找不到名称,可以尝试到Spring的Context中去寻找。
来改写一下 第一个 JSF 程式,以示范JSF与Spring是如何结合运作的,首先设计一个简单的UserChanger类别:
这个类别会将传入的名称改成大写,用来模拟商务层的一个物件,接着来改写一下User类别:
User类别中接受UserChecker类别的实例注入,使用者送出的名称会被UserChecker类别的实例改为大写,您可以使用 org.springframework.web.jsf.DelegatingVariableResolver类别让Spring的Bean名称可以在JSF中曝光,您可以在JSF的faces-config.xml中设定:
实际上在JSF的定义档中并没有定义userChanger的Bean实例,当JSF找不到userChanger时,会使用 DelegatingVariableResolver物件于Spring的Context中寻找同名的Bean实例,假设您的Bean定义档是这么撰写的:
为了让DelegatingVariableResolver物件知道Bean定义档的名称与位置,您必须在web.xml中使用 org.springframework.web.context.ContextLoaderListener类别,并使用<context- param>标签指定Bean定义档的名称与位置,例如:
在不支援Listener设定的容器上(例如Servlet 2.2以更早的版本),您可以使用org.springframework.web.context.ContextLoaderServlet来取代上面的Listener设定,例如:
JSF与Spring的结合,主要目的就是让Spring的Bean名称可以被JSF视作为<managed-bean-name>标签上的名称来使用,也就是当您在JSF定义档中根据一个名称要求一个Bean实例时,若JSF在自己的 Context中找不到名称,可以尝试到Spring的Context中去寻找。
来改写一下 第一个 JSF 程式,以示范JSF与Spring是如何结合运作的,首先设计一个简单的UserChanger类别:
- UserChanger.java
package onlyfun.caterpillar;
public class UserChanger {
public String getChangedName(String name) {
return name.toUpperCase();
}
}
这个类别会将传入的名称改成大写,用来模拟商务层的一个物件,接着来改写一下User类别:
- User.java
package onlyfun.caterpillar;
public class User {
private String name;
private UserChanger userChanger;
public void setName(String name) {
this.name = getUserChanger().getChangedName(name);
}
public String getName() {
return name;
}
public void setUserChanger(UserChanger userChanger) {
this.userChanger = userChanger;
}
public UserChanger getUserChanger() {
return userChanger;
}
}
User类别中接受UserChecker类别的实例注入,使用者送出的名称会被UserChecker类别的实例改为大写,您可以使用 org.springframework.web.jsf.DelegatingVariableResolver类别让Spring的Bean名称可以在JSF中曝光,您可以在JSF的faces-config.xml中设定:
- faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.User
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>userChanger</property-name>
<value>#{userChanger}</value>
</managed-property>
</managed-bean>
</faces-config>
实际上在JSF的定义档中并没有定义userChanger的Bean实例,当JSF找不到userChanger时,会使用 DelegatingVariableResolver物件于Spring的Context中寻找同名的Bean实例,假设您的Bean定义档是这么撰写的:
- beans-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="userChanger"
class="onlyfun.caterpillar.UserChanger"/>
</beans>
为了让DelegatingVariableResolver物件知道Bean定义档的名称与位置,您必须在web.xml中使用 org.springframework.web.context.ContextLoaderListener类别,并使用<context- param>标签指定Bean定义档的名称与位置,例如:
- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
→ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<listener>
<listener-class>
org.springframework.web.
→ context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/beans-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>
javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
在不支援Listener设定的容器上(例如Servlet 2.2以更早的版本),您可以使用org.springframework.web.context.ContextLoaderServlet来取代上面的Listener设定,例如:
...
<servlet>
<servlet-name>demoConfig</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
</servlet>
...
<servlet>
<servlet-name>demoConfig</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
</servlet>
...
现在您可以运作一下程式,看一下执行的结果中,在送出使用者的名称之后,是否会被改写为大字。
转自网络
- 在JSF中整合Spring
- 在JSF中整合使用Spring Bean
- 整合JSF与Spring
- 使用JSF+Spring整合
- JSF整合Spring
- JSF+Hibernate+Spring整合
- 整合Spring和JSF
- JSF和Spring整合
- spring 与 jsf整合
- jsf和spring的整合
- JSF Spring Hibernate 整合:JSH1
- JSF+Spring+Hibernate整合应用
- 整合 JSF+Spring+Hibernate的小例子
- Jsf与Spring的整合原理
- Jsf与Spring的整合原理
- JSF,Hibernate,Spring的整合与杂谈
- Spring整合jsf的管理bean对象
- JSF与Spring的整合原理
- 利用Visual Basic操作XML数据
- 关于附加进程调试的问题
- 打造最快的Hash表(和Blizzard的对话)
- C#和.NET架构
- 转载一篇关于视频水印的综述
- 在JSF中整合Spring
- Office API VBA的常用链接
- “以前进行的程序安装创建了挂起的文件操作。运行程序之前,必须重新起动计算机。”的解决办法
- 访问控制列表概述
- 使用JSF+Spring整合
- VI命令
- 20岁了
- asp.net中, 如何在后台获取访问这个页面的用户的名字?
- Eclipse中如何配置weblogic服务!