web-dev-qa-db-ja.com

JSF MVCフレームワークのMVCとはどのコンポーネントですか?

Model、View、およびControllerであるJSF MVCフレームワークでは?

95
yegor256

これは視点に依存します(意図的)。

大きなアーキテクチャの図では、独自のJSFコードは[〜#〜] v [〜#〜]です。

[〜#〜] m [〜#〜]-ビジネスドメイン/サービス層(EJB/JPA/DAOなど)
[〜#〜] v [〜#〜]-JSFコード
[〜#〜] c [〜#〜]-FacesServlet

開発者の写真では、アーキテクチャ[〜#〜] v [〜#〜]は次のように分割可能です。

[〜#〜] m [〜#〜]-エンティティ
[〜#〜] v [〜#〜]-Facelets/JSPページ
[〜#〜] c [〜#〜]-マネージドBean

小さいクライアントの図では、開発者[〜#〜] v [〜#〜]は次のように分割可能です。

[〜#〜] m [〜#〜]-JSFコンポーネントツリー
[〜#〜] v [〜#〜]-レンダリングされたHTML出力
[〜#〜] c [〜#〜]-クライアント(webbrowser)

さらに小さいJavaScript画像では、クライアント[〜#〜] v [〜#〜]は次のように分割可能です。

[〜#〜] m [〜#〜]-HTML DOMツリー
[〜#〜] v [〜#〜]-視覚的なプレゼンテーション
[〜#〜] c [〜#〜]-イベントリスナー関数(エンドユーザーインタラクションとAjax)

したがって、基本的にはM(M(M(MV(C)C)C)Cです;)

一部のスターターや、非常に基本的なチュートリアルでさえ、マネージドBeanのエンティティのプロパティを混合/コピー/フラット化することに注意してください。これにより、コントローラーがモデルになります。言うまでもなく、これは貧弱なデザインです(つまり、クリーンなMVCデザインではありません)。

次の回答のコードスニペットは、適切なMVCアプローチを示しています。

本の中で Java EE 8 のJSFの決定的なガイド、第8章「バッキングBean」、276ページで、以下のベン図を使用して位置を説明します。 JSF開発者に関連するコンテキスト内でのMVCパラダイムのバッキングBeanの著作権に関する免責事項:本は私が執筆し、写真は私が作成します。

enter image description here

143
BalusC

[〜#〜] m [〜#〜] odelはManagedBeanになります

[〜#〜] v [〜#〜] iewはjspXHTMLになります(さまざまなビューに対応できます)

[〜#〜] c [〜#〜] ontrollerはFacesServletになります

更新、この写真がもっと役立つことを願って

enter image description here

36
Jigar Joshi

Facesサーブレットは、facesのライフサイクルを管理するため、その意味では、各ライフサイクルフェーズで呼び出される可能性のある独自のコードと組み合わされたコントローラです。

http://www.Java-samples.com/images/jsf-lifecycle.gif

4
Don