JSF结合Spring 引入ViewScope
当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的更多相关文章
- JavaServer Faces (JSF) with Spring
JavaServer Faces (JSF) with Spring Last modified: April 30, 2018 by baeldung Spring+ Spring MVC JSF ...
- 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
2009-06-23 Java Web层框架--JSF.Spring MVC.Stripes.Struts 2.Tapestry和Wicket他们各自的优点和缺点: JSF 优点: ◆Java EE标 ...
- jsf使用spring注入的bean
jsf的后台bean中使用spring定义的service,需要使用@ManagedProperty,并且要具有该属性的getter/setter方法. package cn.catr.lm.idc. ...
- 在spring引入log4j(非web项目)
https://blog.csdn.net/u012578322/article/details/78012183 在spring中使用log4j 引入log4j软件包 配置log4j属性 加载log ...
- spring引入实体类映射文件
由于spring对hibernate配置文件hibernate.cfg.xml的集成相当好 LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件: mapp ...
- spring引入properties变量报错
通过properties配置文件配置数据源,代码如下: <bean class="org.springframework.beans.factory.config.PropertyPl ...
- Spring引入配置文件
1.spring.xml加载映射的配置配置文件 <!--采用这种方式简化配置文件--> <context:property-placeholder location="cl ...
- Spring引入外部项目Junit 报ClassNotfound问题
https://blog.csdn.net/sheng_Mu555/article/details/80465679 用它这个方法可以了 所以大家可以过去看一下哈哈
- spring引入HikariCP连接池
1.导入jar包 2.applicationContext.xml中配置 <bean id="dataSource" class="com.zaxxer.hikar ...
随机推荐
- [Android]开源中国源码分析之一---启动界面
开源中国android端版本号:2.4 启动界面: 在AndroidManifest.xml中找到程序的入口, <activity android:name=".AppStart&qu ...
- IOS 发布被拒 PLA 1.2问题 整个过程介绍 02 个人账户升级公司账户
首先,根据上一篇文章得出结论: 1.个人账户,可以发布非营销的APP.例如:公司企业站.个人站 2.公司账户,可以发布营销的APP.例如:京东,天猫,带有盈利的APP 3.企业账户,是使用在公司内部的 ...
- Spring初学之spring的事务管理注解
spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所 ...
- linux命令:head 命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...
- Educational Codeforces Round 15 A, B , C 暴力 , map , 二分
A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 智课雅思词汇---十七、前綴il-, in-, ir-, im-有什麼關係
智课雅思词汇---十七.前綴il-, in-, ir-, im-有什麼關係 一.总结 一句话总结:这几个长得非常像,并且意思也非常像 1.前綴il-, in-, ir-, im-是什麼意思? 前缀:i ...
- WPF利用通过父控件属性来获得绑定数据源RelativeSource
WPF利用通过父控件属性来获得绑定数据源RelativeSource 有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中 ...
- Python爬虫之BeautifulSoup的用法
之前看静觅博客,关于BeautifulSoup的用法不太熟练,所以趁机在网上搜索相关的视频,其中一个讲的还是挺清楚的:python爬虫小白入门之BeautifulSoup库,有空做了一下笔记: 一.爬 ...
- Python学习之路day4-列表生成式、生成器、Iterable和Iterator
一.列表生成式 顾名思义,列表生成式就是用于生成列表的特殊语法形式的表达式. 1.1 语法格式 [exp for iter_var in iterable] 工作过程: 1.通过iter_var迭代i ...
- count(*) 和count(1) 有区别吗
create table test1 (a varchar2(2),b varchar2(2)); insert into test1 values ('b','c'); insert into te ...