S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

Beanの定義を共有

Spring 2.0.3
MyFaces 1.1.5


Springで定義したBeanをJSFのBeanとして取り扱う方法。


1)Springのフィルターをweb.xmlに定義する。

<filter> 
  <filter-name>requestContextFilter</filter-name> 
  <filter-class> 
    org.springframework.web.filter.RequestContextFilter 
  </filter-class> 
</filter> 

<filter-mapping> 
  <filter-name>requestContextFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
</filter-mapping> 


2)faces-config.xmlにSpringのVariableResolverを定義する。

<application> 
  <variable-resolver> 
    org.springframework.web.jsf.DelegatingVariableResolver 
  </variable-resolver> 
</application> 


3)SpringのBean定義でscope属性(request/session/singleton)を設定する。

<bean id="hogeHoge" scope="session" class="xxx.yyy.zzz.HogeHoge" /> 
</bean> 


上記により、JSF側から従来どおりの記述で(JSPのEL記述、FormBean)で、SpringのBeanが取得できる。
SpringのBean定義を共有することにより、DIコンテナAOP等のメカニズムの恩恵を受けることができる。


■参考サイト

IT-Walker on hatena - Ajax+Javaアーキテクチャ構築記
http://d.hatena.ne.jp/Syunpei/20061109