SpringとJSFを統合する場合、どちらのテクノロジーも一緒にうまく機能しないため、どちらのテクノロジーも初心者になることはできません。私の最初で最善のアドバイスは、JSFとSpringに関する本を数冊入手し、それらを統合する前に両方を別々に理解することです。
そうは言っても、JSFはMVCに重点を置いたコンポーネントベースのWebフレームワークです。Springは、Webアプリケーション専用ではない依存性注入と制御の反転フレームワークです。
これらの3つの用語を理解していない場合は、次のとおりです。
コンポーネントベースのWebフレームワーク
依存性注入
制御の反転
それなら私の提案は、あなたがしていることをやめて、すぐに読み始めることです。
これら2つのことを統合する際の主な問題は、対処する必要のある2つのフレームワーク間で責任が重複していることです。スタンドアロンフレームワークとしてのJSFは、個別のDIフレームワークを必要とせずに、独自のマネージドBeanのスコープを維持します。ただし、Springを導入する場合、当然のことながら競合が発生します。SpringはJSFとは別に独自のBeanを管理するため、これらのManagedBeanを参照し、ビジネスオブジェクトまたはDAOを適切に注入して使用するには、JSFManagedBeanがSpringコントローラーになる必要があります。
@Controller
アノテーションを使用してJSFManagedBeanを宣言できます。Spring 3は、それがJSFマネージドBeanであり、Bean名は、ManagedBeanに対して宣言されている名前になります。
@Controller
@Scope("session")
@ManagedBean(name="testBean")
これが処理されたので、次の問題は、JSF実装に付属している厄介なELリゾルバーです。EL Resolverは基本的にそれを実行し、XHTML/JSFページで検出されたEL式を解決します。ただし、参照する場合testBean
、その名前でJSFマネージドBeanを参照しているため、この名前を正しく解決できず、必要なすべてのSpring注入依存関係を持つSpringControllerを見つけることができません。
Spring 3は、JSF実装にバンドルされているものの代わりに使用するカスタムELリゾルバーを提供することにより、この問題を解決します。で使用することを宣言できますfaces-config.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
ついに:
web.xmlにある種のリスナーを入れる必要がありますか?!
他のSpring制御サーブレットを必要とせずに、またはSpring Security統合を必要とせずに、JSF + Springを統合するだけの場合は、に追加する必要はありませんweb.xml
。FacesServletとそのコンテキストパラメータに加えて、状況に必要な可能性のある他のサードパーティコンポーネントライブラリサーブレットを宣言するだけで済みます。