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;)

일부 스타터와 심지어 매우 기본적인 튜토리얼은 관리 빈에서 엔티티의 속성을 혼합 / 복사 / 평평하게 만들어 컨트롤러를 효과적으로 모델로 만듭니다. 말할 필요도없이 이것은 형편없는 디자인입니다 (즉, 깨끗한 MVC 디자인이 아닙니다).

다음 답변의 코드 조각은 올바른 MVC 접근 방식을 보여줍니다.

이 책에서는 자바 EE 8 JSF에 대한 확실한 가이드 8 장 "백업 콩"에, 페이지 276, 벤 다이어그램 아래는 JSF 개발과 관련된 컨텍스트 내에서 MVC 패러다임의 백업 빈의 위치를 설명하기 위해 사용된다 . 저작권 면책 조항 : 책은 내가 쓰고 그림은 내가 만들었습니다.

여기에 이미지 설명 입력


+1 두 철학에 완전히 동의하며 일반적으로 큰 아치가 더 그렇습니다. 실시간 프로젝트보기.
Jigar Joshi

2
말장난을하지 않았다, 여전히 upvoat이
닉 Russler

내 작업에서 @JeffLee, 우리는 관리 빈이 xhtml 뷰를 제어하는 ​​것으로 봅니다. 관리 Bean은보기에 필요한 항목에 따라 엔티티를 가져오고 저장하기 위해 모델 코드와 통신 할 수 있습니다.
djeikyb

5
@Jeff : 그것은 모델 속성을 혼합하는 경우에만 그렇습니다. 마찬가지로, 사용하는 <h:inputText value="#{register.username}">대신 <h:inputText value="#{register.user.name}">.
BalusC 2013

@Jigar의 손해에 대한이 답변에 전적으로 동의합니다. IMO, 관리 빈은 모델 그 이상입니다. 그것들은 모든 상호 작용이 일어나는 FacesServlet의 일종의 확장입니다. 또한 그들은 보류 상태로 수 있지만 오히려 M.보다 훨씬 더 C
익스트림 자전거

36

M odel은 당신의ManagedBean

V iew는 jsp, XHTML(여기에서 다양한 견해를 수용 할 수 있습니다)

관리자FacesServlet

업데이트,이 사진이 더 많은 도움이되기를 바랍니다.

여기에 이미지 설명 입력


4
+1, 당연합니다. 모델이 엔티티 (있는 경우)이고 컨트롤러가 관리 빈 (FacesServlet에 추가)이라고 말할 수 있지만
Shervin Asgari

@Jigar 음, FacesServlet컨트롤러 라면 확장 할 수 없습니다. 내 자신의 컨트롤러를 가질 수 없습니다 ... 관리 Bean이 컨트롤러라는 Shervin의 의견에 동의합니다. Shervin, 대체 답변을 게시하는 것은 어떻습니까?
yegor256

1
FacesServlet통제 하고있는 것은 잠복 입니다.
Jigar Joshi

@Jigar wikipedia 는 "컨트롤러가 사용자의 입력을 받아들이고 해당 입력을 기반으로 작업을 수행하도록 모델과 뷰포트에 지시합니다."라고 말합니다. FacesServlet이 "모델을 지시"하는지 의심 스럽습니까?
yegor256

4
Undercover FacesServlet은 요청, 세션, 애플리케이션 컨텍스트에서 모든 데이터 (위 레이어에서 Bean이라고 함)를 수신하여 처리합니다.
Jigar Joshi


-1

Java Server Faces는 MVC 구성 요소가 다음과 같은 MVC 웹 프레임 워크입니다.

  1. 모델 -데이터와 각 getter 및 setter를 보유하는 속성이있는 @ManagedBean으로 주석이 달린 관리 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 책을 손에 넣으십시오. 위대한 읽고 튜토리얼뿐만 아니라 모든 읽기> (25)는 Q / A는 자신의 존재를 기억하고 JSF 2.3 시작과 유래에 upvoted
Kukeltje
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.