7

これは、Java EEアーキテクチャに基づくアプリケーションの開発における私の最初の経験であり、私は

  • JSF 2.0
  • 春3.1
  • JPA 2.0

少し戸惑う問題についてお聞きしたいのですが。JSFマネージドBeanを宣言したいのですが、この制約に対処するための多くの解決策があります。

  1. マネージドBeanをfaces-config.xmlで宣言します。
  2. コントローラを@ManagedBeanアノテーションでオーバーライドします。
  3. コントローラを@Controllerアノテーションでオーバーライドします。

私の質問は:これらの3つのソリューションの違いは何ですか?!そして、ApplicationConfig.javaまたは/およびweb.xmlにどのような変更を加える必要がありますか?!そして、Springに関しては、web.xmlにある種のリスナーを入れる必要がありますか?!

私は本当に多くのチュートリアルと例を読もうとしましたが、毎回自分がブロックされていることに気づきました!

4

1 に答える 1

25

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とそのコンテキストパラメータに加えて、状況に必要な可能性のある他のサードパーティコンポーネントライブラリサーブレットを宣言するだけで済みます。

于 2012-09-07T11:58:55.943 に答える