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


回答:


150

これは、見方によって異なります(意図的なしゃれ)。

大きなアーキテクチャ図では、独自のJSFコードはVです。

M-ビジネスドメイン/サービスレイヤー(EJB / JPA / DAOなど)
V -JSFコード
C -FacesServlet

開発者の写真では、建築Vは次のように分割できます。

M-エンティティ
V -Facelets / JSPページ
C-マネージドBean

小さなクライアントの図では、開発者Vは次のように分割できます。

M -JSFコンポーネントツリー
V-レンダリングされたHTML出力
C-クライアント(ウェブブラウザ)

さらに小さいJavaScript画像では、クライアントVは次のように分割できます。

M -HTML DOMツリー
V-ビジュアルプレゼンテーション
C-イベントリスナー関数(エンドユーザーインタラクションとAjax)

つまり、基本的にはM(M(M(MVC)C)C)Cです;)

いくつかの初心者およびいくつかの(非常に基本的な)チュートリアルでも、マネージドBean内のエンティティのプロパティを混ぜ合わせる/コピー/フラット化することに注意してください。これにより、コントローラーが効果的にモデルになります。言うまでもなく、これは貧弱な設計です(つまり、クリーンなMVC設計ではありません)。

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

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

ここに画像の説明を入力してください


+1両方の哲学に完全に同意します。一般的には、大きなアーチの場合に当てはまります。リアルタイムのプロジェクトで表示します。
Jigar Joshi、2011

2
駄洒落にならなかったが、まだ賛成票がある
Nick Russler

@JeffLeeが私の仕事では、マネージドBeanがxhtmlビューを制御しているように見えます。マネージドBeanは、モデルコードと通信して、ビューに必要なものに応じてエンティティを取得および保存できます。
djeikyb 2013

5
@ジェフ:それはあなたがそれにモデルのプロパティを混ぜる場合にのみです。のように、の<h:inputText value="#{register.username}">代わりにを使用します<h:inputText value="#{register.user.name}">
BalusC 2013年

@Jigarの不利益に対するこの回答に完全に同意します。IMO、マネージドBeanは単なるモデルではありません。これらはFacesServletの一種の拡張であり、すべての対話が行われます。また、彼らはホールド状態にできますが、むしろM.よりもはるかにC
エクストリームバイカー

36

Mの odelは、あなたのだろうManagedBean

V iewはjspXHTML(まあここでさまざまなビューに対応できます)

Cの ontrollerになりますFacesServlet

更新、この画像がさらに役立つことを願って

ここに画像の説明を入力してください


4
+1、理にかなっていますが、モデルはエンティティ(ある場合)であり、コントローラーは(FacesServletに加えて)マネージドBeanです
Shervin Asgari

@Jigarよく、FacesServlet私がそれを拡張することができないよりもコントローラである場合。自分のコントローラーは持てません...マネージドBeanがコントローラーであるというシャービンに同意します。シャービン、あなた自身の代わりの答えを投稿してはどうですか?
yegor256 2011

1
それはFacesServlet支配している覆面です。
Jigar Joshi、2011

@Jigar ウィキペディアは、「コントローラーはユーザーからの入力を受け入れ、その入力に基づいてアクションを実行するようにモデルとビューポートに指示します」と述べています。FacesServletが「モデルを指示する」ことは疑わしいですか?
yegor256

4
Undercover FacesServletは、リクエスト、セッション、アプリケーションコンテキストからすべてのデータ(上位層ではBeanと呼ばれます)を受信して​​処理します。
Jigar Joshi


-1

Java Server FacesはMVC Webフレームワークであり、MVCコンポーネントは次のとおりです。

  1. モデル -@ManagedBeanで注釈が付けられたマネージドBeanクラスであり、データとそれぞれのゲッターおよびセッターを保持するプロパティがあります。マネージドBeanクラスには、ビジネスロジックを含めることもできます。これらは、リクエスト、セッション、アプリケーションなどのさまざまなスコープを持つことができるバッキングBeanとも呼ばれます。

  2. 表示 -クライアントに表示されるユーザーインターフェイス、つまり.xhtmlファイル。管理対象Beanからデータを取得し、応答としてレンダリングされます。

  3. コントローラ -javax.servlet.webapp.FacesServletは、基本的にはサーブレットである集中コントローラクラスです。JSFに送られるリクエストは、最初にFacesServletコントローラに送られます。独自のコントローラークラスを作成するJSPとは異なり、JSFではコントローラーサーブレットはフレームワークの固定部分であり、作成しません。

MVCフロー-

ここに画像の説明を入力してください


これは36の投票された質問と同じです。答えをもっと明確にできると思われる場合は編集してください
Kukeltje

@Kukeltje私の答えは、MVCコンポーネントに名前を付けるだけでなく、説明が多いと思います。
Hetal Rachh

説明がほとんどない... 1:「データを含む」は最善ではないため(エンティティに含める必要があります)、ビジネスロジック、これらはサービス内にある必要があるため、最善ではありません(最も高い回答の追加リンクを参照) )、2:あまり多くない3:もう少し多くのテキストだが、追加したテキストよりも明確になる他の回答の画像が欠けている...
Kukeltje

@Kukeltjeありがとうございます。私はJSFの初心者です。
Hetal Rachh

問題ない。私はこれを長い間使用しており、大きな成功を収めています。Bauke ScholtzとArjan Thijmsによるjava ee 8とjsfの本を手に入れてください。よく読んでチュートリアルですが、Stackoverflowで25を超える賛成されたQ / Aもすべて読んでください。それらの存在を思い出して、jsf 2.3と
Kukeltje
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.