JSF结合Spring 引入ViewScope
2015-07-02 15:40
661 查看
当JSF项目的faceConfig中配置了Spring的配置代码
那么JSF里所有的bean都将接受Spring的管理,Spring对实例提供了三种作用域,分别是session、request、application。但JSF的作用域就比较多了,它还有ViewScope、Conversation等等。其中ViewScope用的比较多,翻阅国外站点,找到一个primeFaces论坛提供的可用方法:
1. 首先创建一个Spring的自定义作用域类,代码如下:
2. 在Spring的配置文件中配置viewScope的作用域。
3. 最后是如何引用了,引用比较简单,就是在配置的bean里,加入一个属性 scope="view"即可。ViewScope比RequestScope级别要大,这样对于JSF的里的ajax请求是相当有用的,只要不导航到其他页面,bean就不会离开作用域。
其他:因为ViewScope在进入页面时会新建,在离开页面时会销毁,所以可以利用这个特点做一些bean的初始化及数据释放销毁的操作,借助于@PostConstruct和@PreDestroy注解的方法就可以达到。
<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注解的方法就可以达到。
相关文章推荐
- Java中的return
- 使用Spring MVC构建Web应用程序
- Spring MVC 框架搭建及详解
- 浅谈java中的return
- Java 递归解决 "只能两数相乘的计算器计算x^y" 问题
- web开发学习笔记
- JSP中javaBean一些问题
- 修改MyEclipse8.5的workspaces
- java 常用系统相关语句
- Java WEB 文件下载
- Java串口通信详解
- 白话spring依赖注入
- Spring IOC-XmlBeanFactory如何加载xml及如何存储转换后的信息
- java框架是什么意思?
- Spring上传文件学习笔记
- OSGI的含义
- ActiveMQ、Spring整合学习
- 解决 - java.lang.OutOfMemoryError: unable to create new native thread
- eclipse安装ADT慢的龟速问题
- Java面向对象(一)