当JSF项目的faceConfig中配置了Spring的配置代码

 <application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

  那么JSF里所有的bean都将接受Spring的管理,Spring对实例提供了三种作用域,分别是session、request、application。但JSF的作用域就比较多了,它还有ViewScope、Conversation等等。其中ViewScope用的比较多,翻阅国外站点,找到一个primeFaces论坛提供的可用方法:

1. 首先创建一个Spring的自定义作用域类,代码如下:

  

 import java.util.Map;

 import javax.faces.context.FacesContext;

 import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope; public class ViewScope implements Scope { @Override
public Object get(String name, ObjectFactory<?> objectFactory) {
// System.out.println("**************************************************");
// System.out.println("-------------------- Getting objects For View Scope ----------");
// System.out.println("**************************************************");
Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
if(viewMap.containsKey(name)){
return viewMap.get(name);
}else{
Object object = objectFactory.getObject();
viewMap.put(name, object);
return object;
}
} @Override
public String getConversationId() {
return null;
} @Override
public void registerDestructionCallback(String arg0, Runnable arg1) { } @Override
public Object remove(String name) {
// System.out.println("**************************************************");
// System.out.println("-------------------- View Scope object Removed ----------");
// System.out.println("**************************************************"); if (FacesContext.getCurrentInstance().getViewRoot() != null) {
return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
} else {
return null;
}
} @Override
public Object resolveContextualObject(String arg0) {
return null;
} }

2. 在Spring的配置文件中配置viewScope的作用域。

  

     <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="view" value="com.xx.scope.ViewScope" />
</map>
</property>
</bean>

3. 最后是如何引用了,引用比较简单,就是在配置的bean里,加入一个属性 scope="view"即可。ViewScope比RequestScope级别要大,这样对于JSF的里的ajax请求是相当有用的,只要不导航到其他页面,bean就不会离开作用域。

其他:因为ViewScope在进入页面时会新建,在离开页面时会销毁,所以可以利用这个特点做一些bean的初始化及数据释放销毁的操作,借助于@PostConstruct和@PreDestroy注解的方法就可以达到。

JSF结合Spring 引入ViewScope的更多相关文章

  1. JavaServer Faces (JSF) with Spring

    JavaServer Faces (JSF) with Spring Last modified: April 30, 2018 by baeldung Spring+ Spring MVC JSF ...

  2. 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket

    2009-06-23 Java Web层框架--JSF.Spring MVC.Stripes.Struts 2.Tapestry和Wicket他们各自的优点和缺点: JSF 优点: ◆Java EE标 ...

  3. jsf使用spring注入的bean

    jsf的后台bean中使用spring定义的service,需要使用@ManagedProperty,并且要具有该属性的getter/setter方法. package cn.catr.lm.idc. ...

  4. 在spring引入log4j(非web项目)

    https://blog.csdn.net/u012578322/article/details/78012183 在spring中使用log4j 引入log4j软件包 配置log4j属性 加载log ...

  5. spring引入实体类映射文件

    由于spring对hibernate配置文件hibernate.cfg.xml的集成相当好  LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件:  mapp ...

  6. spring引入properties变量报错

    通过properties配置文件配置数据源,代码如下: <bean class="org.springframework.beans.factory.config.PropertyPl ...

  7. Spring引入配置文件

    1.spring.xml加载映射的配置配置文件 <!--采用这种方式简化配置文件--> <context:property-placeholder location="cl ...

  8. Spring引入外部项目Junit 报ClassNotfound问题

    https://blog.csdn.net/sheng_Mu555/article/details/80465679 用它这个方法可以了 所以大家可以过去看一下哈哈

  9. spring引入HikariCP连接池

    1.导入jar包 2.applicationContext.xml中配置 <bean id="dataSource" class="com.zaxxer.hikar ...

随机推荐

  1. mysql性能优化的一些建议

    mysql性能优化的一些建议 1.EXPLAIN 你的 SELECT 查询 查看rows列可以让我们找到潜在的性能问题. 2.为关键字段添加索引,比如:where, order by, group b ...

  2. CSS3 3D旋转下拉菜单

    在线演示 本地下载

  3. volatile笔记

    总结自:https://www.cnblogs.com/dolphin0520/p/3920373.html 了解volatile之前得明白什么是原子性.可见性.有序性及指令重排序,详见:https: ...

  4. iOS_数据存取(二)

    本节内容目录: 一.SQLite3 二.Core Data 一.SQlite3 SQLite3是⼀款开源的嵌入式关系型数据库,可移植性好.易使用.内存开销小SQLite3是⽆类型的,意味着你可以保存任 ...

  5. Docker 容器监控平台-Weave Scope

    官网地址:https://www.weave.works/oss/scope/ 安装 执行如下脚本安装运行 Weave Scope. curl -L git.io/scope -o /usr/loca ...

  6. RHEL7 LAMP

    准备篇: RHEL 7.0系统安装配置图解教程:http://www.osyunwei.com/archives/7702.html 一.使用系统镜像文件配置本地yum源 1.使用WinSCP.exe ...

  7. java入门了解04

    1.异常的体系:---------|Throwable --------------| Error (错误) 错误一般是由于jvm或者是硬件引发的问题,所以我们一般都不会通过代码去处理.------- ...

  8. 重定向【TLCL】

    >                 重定向标准输出 > ls-output.txt       清空或者创建一个新文件夹 >>                         ...

  9. mysql基础(3)-高级查询

    聚合函数 count 返回查询结果的条数 max 返回查询结果的最大值 min 返回查询结果的最小值 sum 返回查询结果的和 avg 返回查询结果的平均值   统计分数大于等于90的人数: mysq ...

  10. 分析新建的android代码

    1).xml文件中的<?xml version="1.0" encoding="utf-8"?>是每个xml文件开仅有一个的声明xml的代码. 2) ...