自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSF和Spring的集成

開(kāi)發(fā) 后端
本文介紹JSF和Spring的集成,原理是獲得彼此的上下文引用,以此進(jìn)一步獲得各自管理的bean,這是可能的,因?yàn)閮烧呤莣eb應(yīng)用框架都遵循servlet規(guī)范,為二者整合提供了可能和基礎(chǔ)。

JSF和Spring集成的資料比較少,原理是獲得彼此的上下文引用,以此進(jìn)一步獲得各自管理的bean,這是可能的,因?yàn)閮烧呤莣eb應(yīng)用框架都遵循servlet規(guī)范,為二者整合提供了可能和基礎(chǔ).
 
在 Spring中ApplicationContext是相當(dāng)重要的類(lèi),對(duì)于web應(yīng)用,它還包裝了 javax.servlet.ServletContext,為web應(yīng)用提供了所有可以利用的數(shù)據(jù),包括可管理bean,Faces中通過(guò) FacesContext類(lèi)可以獲得所有可以利用的資源,同樣包括JSF的可管理支持bean,它們都圍繞著ServletContext提供了自己的門(mén)面,通過(guò)各自的門(mén)面在Servlet容器的世界里彼此相通.
本文介紹兩種方式,實(shí)現(xiàn)二者集成:
1. 通過(guò)寫(xiě)自己的類(lèi)來(lái)完成二者的連通,實(shí)際上只是獲得彼此世界里存活的bean,對(duì)于JSF中事件處理可能需要更進(jìn)一步的構(gòu)思和編碼,為了這點(diǎn),第二個(gè)方法介紹了一種框架.
2. 使用框架完成二者集成.
 
一  自己動(dòng)手,下面的代碼以示例為主,其它涉及的類(lèi)和接口略去.
這個(gè)工具類(lèi)提供在JSF世界里查找Spring管理的bean.也實(shí)現(xiàn)在Spring中查找JSF組件的方法.

  1. package com.skysoft.rbac.dao;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.web.context.support.WebApplicationContextUtils;  
  4. import javax.faces.context.FacesContext;  
  5. import javax.servlet.ServletContext;  
  6. import javax.faces.el.ValueBinding;  
  7. import javax.faces.FactoryFinder;  
  8. import javax.faces.application.Application;  
  9. import javax.faces.application.ApplicationFactory;  
  10. public final class SpringFacesUtil {  
  11.   public SpringFacesUtil() {  
  12.   }  
  13.   /**  
  14.    * 從Spring中查找bean.  
  15.    * @param beanname String  
  16.    * @return Object  
  17.    */  
  18.   public static Object findBean(String beanname) {  
  19.     ServletContext context = (ServletContext) FacesContext.getCurrentInstance().  
  20.         getExternalContext().getContext();  
  21.     ApplicationContext appctx = WebApplicationContextUtils.  
  22.         getRequiredWebApplicationContext(context);  
  23.     return appctx.getBean(beanname);  
  24.   }  
  25.   /**  
  26.    * 從JSF中查找bean.  
  27.    * @param beanname String  
  28.    * @return Object  
  29.    */  
  30.   public static Object lookupBean(String beanname) {  
  31.     Object obj = getValueBinding(getJsfEl(beanname)).getValue(FacesContext.  
  32.         getCurrentInstance());  
  33.     return obj;  
  34.   }  
  35.   private static ValueBinding getValueBinding(String el) {  
  36.     return getApplication().createValueBinding(el);  
  37.   }  
  38.   private static Application getApplication() {  
  39.     ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.  
  40.         getFactory(FactoryFinder.APPLICATION_FACTORY);  
  41.     //FactoryFinder.FACES_CONTEXT_FACTORY  
  42.     //FactoryFinder.RENDER_KIT_FACTORY  
  43.     return appFactory.getApplication();  
  44.   }  
  45.   private static String getJsfEl(String value) {  
  46.     return "#{" + value + "}";  
  47.   }  

下面定義一個(gè)由JSF管理的bean:

  1. package com.skysoft.rbac.dao;  
  2.    
  3. import javax.servlet.ServletContext;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.web.context.support.WebApplicationContextUtils;  
  6. import org.skysoft.struts.jsf.util.FacesUtils;  
  7. public class ServiceLocatorBean  
  8.     implements ServiceLocator {  
  9.   private static final String DAO_SERVICE_BEAN_NAME = "userDAO";  
  10.   //這個(gè)dao就是由Spring提供的管理bean,這個(gè)dao可以使用Hibernate實(shí)現(xiàn).  
  11.   private UserDAO dao;  
  12.   public ServiceLocatorBean() {  
  13.     this.dao = (UserDAO)SpringFacesUtil.findBean(DAO_SERVICE_BEAN_NAME);  
  14.   }  
  15.   public UserDAO getDao() {  
  16.     return dao;  
  17.   }  
  18. }  
  19. 下面是一個(gè)使用ServiceLocatorBean的類(lèi).  
  20. public class UserDAOImp  
  21.     extends HibernateDaoSupport implements UserDAO {  
  22.   private UserDAO dao;  
  23.   private List list;  
  24.   public UserDAOImp() {}  
  25.   public List getList() {  
  26.     if (list == null) {  
  27.       list = dao.getList();  
  28.     }  
  29.     return list;  
  30.   }  
  31.   public UserDAO getDao() {  
  32.     return dao;  
  33.   }  
  34.   public void setDao(UserDAO dao) {  
  35.     this.dao = dao;  
  36.   }  

下面是一個(gè)使用ServiceLocatorBean的類(lèi):

  1. public class UserDAOImp  
  2.   extends HibernateDaoSupport implements UserDAO {  
  3.   private UserDAO dao;  
  4.   private List list;  
  5.   public UserDAOImp() {}  
  6.   public List getList() {  
  7.     if (list == null) {  
  8.       list = dao.getList();  
  9.     }  
  10.     return list;  
  11.   }  
  12.   public UserDAO getDao() {  
  13.     return dao;  
  14.   }  
  15.   public void setDao(UserDAO dao) {  
  16.     this.dao = dao;  
  17.   }  

在faces-config.xml中的配置:

  1. <managed-bean> 
  2. <managed-bean-name>serviceLocatorBeanmanaged-bean-name> 
  3. <managed-bean-class>com.skysoft.rbac.dao.ServiceLocatorBeanmanaged-bean-class> 
  4. <managed-bean-scope>sessionmanaged-bean-scope> 
  5. managed-bean> 
  6. <managed-bean> 
  7. <managed-bean-name>Usermanaged-bean-name> 
  8. <managed-bean-class>com.skysoft.rbac.Usermanaged-bean-class> 
  9. <managed-bean-scope>requestmanaged-bean-scope> 
  10. <managed-property> 
  11. <property-name>serviceLocatorproperty-name> 
  12. <property-class>com.skysoft.rbac.dao.ServiceLocatorBeanproperty-class> 
  13. <value>#{serviceLocatorBean}value> 
  14.       managed-property> 
  15. managed-bean> 

在applicationContext.xml中的配置:

  1. <bean id="userDAO" class="com.skysoft.rbac.dao.UserDAOImp"> 
  2.       <property name="sessionFactory"> 
  3.              <ref local="sessionFactory" /> 
  4.       property> 
  5. bean> 

二 使用框架

1.介紹
這個(gè)框架是Spring相關(guān)項(xiàng)目,提供一個(gè)包de.mindmatters.faces.spring,這個(gè)包包含JSF和Spring框架綜合集成的粘合代碼,這些代碼以獨(dú)立于一個(gè)實(shí)現(xiàn)的方式完成,這樣它能和任何JSF實(shí)現(xiàn)一起使用.
本包的提供的代碼主要目的是盡可能透明的集成兩個(gè)框架,主要特征:
◆JSF/JSP開(kāi)發(fā)者應(yīng)該能訪問(wèn)Spring管理的Beans,就好象它們是由JSF管理的.
◆JSF可管理beans應(yīng)能集成入Spring.
◆RequestHandledEvent事件也應(yīng)該能被發(fā)布到Spring.

2.JSF配置集成
本包構(gòu)造了一個(gè)基于faces配置文件(e.g. /WEB-INF/faces-config.xml)的WebApplicationContext類(lèi), 讓它成為遵循"spring-beans" DTD配置文件(e.g. defined in /WEB-INF/applicationContext.xml)來(lái)配置的ApplicationContext的孩子,這樣依從"faces- config" DTD的WebApplicationContext就是全特征的,即自動(dòng)擁有如下功能:

1)JSF可管理beans實(shí)現(xiàn)了Spring的*Aware interfaces:
◆ApplicationContextAware
◆BeanFactoryAware
◆BeanNameAware
◆ResourceLoaderAware
◆ServletContextAware

2)JSF可管理beans實(shí)現(xiàn)Spring的lifecycle interfaces:
InitializingBean
DisposableBean
◆實(shí)現(xiàn)Spring的FactoryBean interface
◆實(shí)現(xiàn)Spring的ApplicationListener interface
◆發(fā)布ApplicationEvent事件.
◆從資源中讀取消息.
等等,更多可看Spring.

3 訪問(wèn)方式

1) 從JSF中程序化的訪問(wèn)Spring管理的beans.
因?yàn)樵贔acesWebApplicationContext和ApplicationContext之間有層次關(guān)系,所以你的JSF可管理支持beans 能容易的實(shí)現(xiàn)ApplicationContextAware接口,并能通過(guò)getBean方法訪問(wèn)它而不管它是否定義在 FacesWebApplicationContext中還是定義在父ApplicationContext類(lèi)對(duì)象中.

2) 通過(guò)JSF EL從JSF中訪問(wèn)Spring管理的beans.
能夠使用JSF EL訪問(wèn)beans無(wú)論你引用的bean由JSF管理還是由Spring管理.兩個(gè)bean上下文在存取時(shí)間合并.

a) 直接訪問(wèn):
如果一個(gè)帶有請(qǐng)求名字的bean只存在于Spring上下文內(nèi)的話,這個(gè)bean被使用,bean的singleton屬性設(shè)置被完全保持.

b) 區(qū)域化訪問(wèn)(scoped access):
如果你要從JSF定義bean的作用域的能力上得益還想讓那個(gè)bean由Spring管理,那么就要在兩個(gè)上下文中定義,只是對(duì)于JSF上下文中的定義的類(lèi)類(lèi)型要使用de.mindmatters.faces.spring.SpringBeanFactory類(lèi),你還應(yīng)該設(shè)置那個(gè)bean的 singleton屬性到false,因這能覆蓋你的作用域設(shè)置.在你使用JSF EL訪問(wèn)bean時(shí),你總能獲得一個(gè)遵從你在JSF上下文中定義的作用域設(shè)置的由Spring管理的bean的實(shí)例.
 
三 用法
通常,就象設(shè)置任何其它JSF web應(yīng)用一樣設(shè)置你的web應(yīng)用,下面的樣例配置展示怎樣使能上面提到的特征。
在web.xml配置中必須加入下列配置條目,同時(shí)注意把該庫(kù)的jsf-spring.jar放在適當(dāng)?shù)奈恢?

  1. <web-app> 
  2.     .........  
  3.          
  4.     <filter> 
  5.         <filter-name>RequestHandledfilter-name> 
  6.         <filter-class>de.mindmatters.faces.spring.support.RequestHandledFilterfilter-class> 
  7.     filter> 
  8.         
  9.     <filter-mapping> 
  10.         <filter-name>RequestHandledfilter-name> 
  11.         <url-pattern>*.facesurl-pattern> 
  12.     filter-mapping> 
  13.    
  14.      
  15.     <listener> 
  16.         <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> 
  17.     listener> 
  18.     .........  
  19. web-app> 

下面的一些說(shuō)明,都可以通過(guò)下載這個(gè)Spring相關(guān)項(xiàng)目得到,列在這里只為演示上面的說(shuō)明的功能.
WEB-INF/faces-config.xml

  1.  
  2. <managed-bean> 
  3.     <managed-bean-name>jsfBeanmanaged-bean-name> 
  4.     <managed-bean-class>example.NameBeanmanaged-bean-class> 
  5.     <managed-bean-scope>sessionmanaged-bean-scope> 
  6.     <managed-property> 
  7.         <property-name>nameproperty-name> 
  8.     managed-property> 
  9. managed-bean> 
  10.  
  11.        <managed-bean> 
  12.               <managed-bean-name>scopedAccessSpringBeanmanaged-bean-name> 
  13.        <managed-bean-class>de.mindmatters.faces.spring.SpringBeanScopemanaged-bean-class> 
  14.               <managed-bean-scope>sessionmanaged-bean-scope> 
  15.        managed-bean> 
  16.  
  17. <managed-bean> 
  18.     <managed-bean-name>referencingBeanmanaged-bean-name> 
  19.     <managed-bean-class>example.ReferencingBeanmanaged-bean-class> 
  20.     <managed-bean-scope>sessionmanaged-bean-scope> 
  21.     <managed-property> 
  22.         <property-name>referencedBeanproperty-name> 
  23.         <value>#{managedPropertyAccessSpringBean}value> 
  24.     managed-property> 
  25. managed-bean> 
  26. WEB-INF/applicationContext.xml (partial)  
  27.   <bean id="directAccessSpringBean" class="example.NameBean"/> 
  28.   <bean id="scopedAccessSpringBean" class="example.NameBean" singleton="false"/> 
  29.   <bean id="managedPropertyAccessSpringBean" class=                                                                   "example.NameBean" singleton="false"/> 

參考:
http://jsf-spring.sourceforge.net/   JSF-Spring,Spring相關(guān)項(xiàng)目官方站點(diǎn),提供本文介紹的框架下載以及實(shí)例下載.
http://www.javaworld.com/javaworld/jw-07-2004/jw-0719-jsf.html一篇關(guān)于JSF和Spring的文章.

【編輯推薦】

  1. JSF2中Ajax事件和錯(cuò)誤
  2. 簡(jiǎn)述JSF程序配置
  3. Java開(kāi)發(fā)三劍客JSF2.0、EJB3.1、JPA2.0現(xiàn)狀及發(fā)展
  4. 在JSF/JSP中集成FCKEditor
  5. JSF+Seam框架學(xué)習(xí)心得
責(zé)任編輯:佚名 來(lái)源: CSDN
相關(guān)推薦

2009-06-17 15:18:38

JSF與Spring

2009-06-26 13:48:57

G4JSFGWTJSF

2009-09-23 17:56:45

JSF入門(mén)

2009-06-23 09:33:20

FCKEditorJSFJSP

2009-06-22 15:35:31

JSF和Struts

2009-06-22 14:22:41

JSF和Tapestr

2009-07-03 10:48:12

JSP和JSF

2009-06-24 13:50:29

JSF和MVC

2009-06-24 16:42:17

JSF和Facelet

2011-06-30 10:20:38

JSFMVC

2009-06-24 16:16:30

JSF和Tapestr

2009-06-24 17:43:24

Struts和JSF

2009-06-19 15:52:58

Struts和Spri

2009-06-25 11:11:25

控制JSF切入點(diǎn)

2009-06-24 14:17:00

BackingBeanJSF配置文件

2009-06-25 14:26:33

JSFDojo小部件

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2009-06-23 16:52:16

JSFHibernateWeb應(yīng)用

2009-06-18 15:56:49

Struts和Spri

2009-03-24 10:30:35

SpringStruts集成
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)