답변:
이것은 관점 (의도 한 말장난)에 따라 다릅니다.
큰 아키텍처 그림에서 자신의 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 패러다임의 백업 빈의 위치를 설명하기 위해 사용된다 . 저작권 면책 조항 : 책은 내가 쓰고 그림은 내가 만들었습니다.
<h:inputText value="#{register.username}">
대신 <h:inputText value="#{register.user.name}">
.
M odel은 당신의ManagedBean
V iew는 jsp
, XHTML
(여기에서 다양한 견해를 수용 할 수 있습니다)
관리자 는FacesServlet
업데이트,이 사진이 더 많은 도움이되기를 바랍니다.
FacesServlet
컨트롤러 라면 확장 할 수 없습니다. 내 자신의 컨트롤러를 가질 수 없습니다 ... 관리 Bean이 컨트롤러라는 Shervin의 의견에 동의합니다. Shervin, 대체 답변을 게시하는 것은 어떻습니까?
FacesServlet
통제 하고있는 것은 잠복 입니다.
faces 서블릿은 faces 수명주기를 관리하므로 각 수명주기 단계에서 호출 될 수있는 자체 코드와 결합 된 컨트롤러입니다.
Java Server Faces는 MVC 구성 요소가 다음과 같은 MVC 웹 프레임 워크입니다.
모델 -데이터와 각 getter 및 setter를 보유하는 속성이있는 @ManagedBean으로 주석이 달린 관리 Bean 클래스입니다. 관리 빈 클래스는 또한 비즈니스 로직을 포함 할 수 있으며 요청, 세션, 애플리케이션과 같은 다른 범위를 가질 수있는 백킹 빈이라고도합니다.
보기 -클라이언트에 표시되는 사용자 인터페이스, 즉 .xhtml 파일. 관리되는 Bean에서 데이터를 가져오고 응답으로 렌더링됩니다.
컨트롤러 -javax.servlet.webapp.FacesServlet은 기본적으로 서블릿 인 중앙 집중식 컨트롤러 클래스입니다. JSF에 대한 모든 요청은 먼저 FacesServlet 컨트롤러로 이동합니다. 자체 컨트롤러 클래스를 작성하는 JSP와는 달리 JSF에서 컨트롤러 서블릿은 프레임 워크의 고정 된 부분이며 작성하지 않습니다.
MVC 흐름