web-dev-qa-db-ja.com

JSFをSpring MVCのビューテクノロジーとして使用する

現在、小さなSpring MVC PoCを実装していますが、社内のほとんどの人がJ2EE with Primefaces環境に慣れているため、ビュー技術としてJSFを使用したいと思います。

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

私の必要は、魅力的なUIを作成することです。 JSPをビューテクノロジとして使用してSpring MVCを使用する簡単な方法はありますか?

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

63
Astronaut

あなたは概念的な間違いを犯しています。 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ビューテクノロジー (および 他の多くのユーザー )とともに使用することもできます。ただし、Spring MVCをJSFコンポーネントで使用することはできません。もちろん、PrimeFacesなどのJSFコンポーネントライブラリを使用することはできません。 JSF出力コンポーネントは機能する場合がありますが、JSF入力コンポーネントはまったく機能しません。 Spring MVCには既に入力用の独自の_<form:xxx>_タグがあります。それらを混在させても、混同し混乱するコードベースの両方のフレームワークの機能の半分になります。これは意味がありません。必要なのがPrimeFacesと同じUIを使用することだけであれば、 jQuery UI を取得するだけです。また、PrimeFacesが内部で使用しているものでもあります。 PrimeFacesは、jQueryベースのJSFコンポーネントライブラリです。

反対側から、Spring IoC/DIとSpring MVCを混同したことも非常に良いことです。 Spring IoC/DIは、JSFとともに sable です。 JSFマネージドBean機能(_@ManagedBean_およびフレンド)をSpringマネージドBean機能(_@Component_およびフレンド)に置き換えることができます。通常は、JSFバッキングで_@Autowired_を使用するための唯一の目的があります。豆。しかし、それだけです。 JSF MVCフレームワークのライフサイクル、JSFコンポーネント、およびビューテクノロジーは変更されていません。標準のJava EEと同等のEEは、 [〜#〜] cdi [〜#〜] (および [〜#〜] ejb [〜#〜 ] )。

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

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

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

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

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

こちらもご覧ください:

149
BalusC

Spring MVCとJSFは実際には混ざり合っていません。ビューに関連するものにJSFを使用し、Springに裏付け(サービス、DAOなど)を管理させて配線させることができます。しかし、@ ControllersをJSFページと一致させようとすることは、本当にうまく機能するものではありません(その両方は、コンポーネントベースに対して異なるスタック要求です)。

SpringとJSFを統合するには、faces-config.xmlにSpringBeanFacesELResolverを追加する必要があります。これにより、SpringsアプリケーションコンテキストからBeanが検索されます。これが機能するには、CDIベースのアノテーションではなく、プレーンなJSFアノテーションを使用する必要があります。

13
M. Deinum

ここでは、Spring Webflowが役立ちます。このサンプルプロジェクトをご覧ください。 https://github.com/spring-projects/spring-webflow-samples/tree/master/primefaces-showcase

3
Manoj Gupta