67

私は現在、小規模な Spring MVC PoC を実装しています。私の会社のほとんどの人は J2EE と Primefaces 環境に慣れているため、JSF をビュー テクノロジとして使用したいと考えています。

Spring MVC 3 は JSF または単に JSP をサポートしていますか? 私は2つを混ぜ合わせた複数の記事を読みました。

魅力的な UI を作成する必要があります。ビューテクノロジーとして JSP を備えた Spring MVC を使用してこれを行う簡単な方法はありますか?

私たちのアプリケーションは、複数のページでスケジュール/カレンダーを使用しています。基本的には時間管理アプリです

4

3 に答える 3

158

あなたは概念的な間違いを犯しています。JSF はビュー テクノロジではありません。JSF は MVC フレームワークです。どちらも異なるイデオロギーを持っていますが、Spring MVC とまったく同じです。JSF はコンポーネント ベースの MVC であり、Spring MVC はリクエスト ベースの MVC です。したがって、彼らは完全な競争相手です。それらを混在させることはできません。どちらかを選択する必要があります。代わりに、JSP と Facelets は真のビュー テクノロジです。Java EE 6 (2009 年 12 月) 以降、JSP は非推奨となり、JSF のデフォルトのビュー テクノロジとして Facelets (XHTML) に置き換えられました。

Spring MVC をJSP ビュー テクノロジで使用できます。また、Spring MVC をFacelets ビュー テクノロジー(およびその他の多く) と共に使用することもできます。ただし、PrimeFaces のような JSF コンポーネント ライブラリはもちろん、JSF コンポーネントで Spring MVC を使用することはできません。JSF 出力コンポーネントは機能する可能性がありますが、JSF 入力コンポーネントはまったく機能しません。Spring MVC には、入力用の独自の<form:xxx>タグが既にあります。それらを混ぜ合わせたとしても、両方のフレームワークの機能の半分が、混ざり合った紛らわしいコード ベースになってしまいます。これは意味がありません。PrimeFaces と同じ UI を使用することだけが必要な場合は、jQuery UIを取得してください。これはまさに、PrimeFaces が裏で使用しているものでもあります。PrimeFaces は、jQuery ベースの JSF コンポーネント ライブラリです。

反対に、Spring IoC/DI と Spring MVC を混同したことも非常に良いことです。Spring IoC/DI は、JSF と一緒に使用できます。@ManagedBeanJSF マネージド Bean 機能 (およびその仲間) を Spring マネージド Bean 施設 (およびその仲間) に置き換えることができます。通常は、JSF バッキング Bean で@Component使用するための唯一の目的です。@Autowiredしかし、それだけです。JSF MVC フレームワークのライフサイクル、JSF コンポーネント、およびビュー テクノロジは変更されていません。それに相当する標準の Java EE は、CDI (およびEJB ) を使用することです。

同じ話が Spring Security にも当てはまります。JSF と一緒に使用できますが、Spring Security + Spring MVC を対象としたドキュメント/例に従って構成するのではなく、Spring Security + JSF のみに従う必要があります。ビジネス アクションに対する Spring Security の制約は、JSF マネージド Bean 機能を Spring マネージド Bean 機能に置き換えた場合にのみ機能することに注意してください。そのため、前の段落で説明したように、「Spring を JSF に統合する」必要があります。これに相当する標準の Java EE は、 のエントリを介してコンテナ管理セキュリティ(JAAS/JASPIC) を使用することです。<security-constraint>web.xml

同じ話が Spring WebFlow にも当てはまります。古いバージョンは複数の JSF コンポーネント ライブラリと一緒に使用すると競合が発生するため、最新バージョンの Spring WebFlow を使用していることを確認するだけで済みます。さらに、JSF 2.2 以降、新しいFaces Flows機能が標準の Java EE API の一部として導入されたため、基本的に Spring WebFlow は不要になりました。

次に、Spring Boot があります。これは、Java EE に直接相当するものはありません。main()Spring Boot を使用すると、基本的に、「簡単で抽象的な方法で」メソッドを持つプレーンな Java アプリケーション クラスを使用して、Java EE アプリケーションを実行できます。Spring Boot がなければ、それは確かに可能です (そうでなければ、Spring Boot は存在​​しなかったでしょう)。ドキュメントに基づいてサーバー固有の詳細を考慮する必要があるため、構成に関してはもう少し作業が必要です。例: UndertowJetty

JSF と Spring MVC に戻ると、本当に必要な場合は、Spring MVC と JSF を同じ Web アプリケーションで隣り合わせて安全に実行できますが、サーバー側では相互運用できません。それらは完全に独立して実行されます。JSF によって生成された HTML ページ内の JavaScript が同じ Web アプリケーション内で Spring ベースの REST Web サービス呼び出しを呼び出した場合、それらはクライアント側で互いに接触する程度です。しかし、Spring Web サービスは、それに応じて応答するために JSF について何も知る必要はありません。その Spring REST Web サービスに相当する標準の Java EE はJAX-RSです。

今後の Java EE 8 には、JSF と Spring MVC の両方の教訓に基づいた「 MVC 」という名前の新しい要求ベースの MVC フレームワークが付属し、Spring MVC に取って代わり、JSF の標準的な代替手段を提供します。

以下も参照してください。

于 2013-09-11T15:25:57.560 に答える