Respostas:
Isso depende do ponto de vista (trocadilho intencional).
No quadro geral da arquitetura, seu próprio código JSF é o V :
M - Domínio comercial / camada de serviço (por exemplo, EJB / JPA / DAO)
V - Seu código JSF
C - FacesServlet
Na imagem do desenvolvedor, o V arquitetônico é, por sua vez, divisível como abaixo:
M - Entidade
V - Facelets / JSP página
C - Bean gerenciado
Na imagem menor do cliente, o desenvolvedor V pode ser dividido conforme abaixo:
M - Árvore de componentes JSF
V - Saída HTML renderizada
C - Cliente (navegador da web)
Na imagem JavaScript ainda menor, o cliente V é, por sua vez, divisível como abaixo:
M - árvore HTML DOM
V - Apresentação visual
C - Funções de ouvinte de eventos (interação do usuário final e Ajax)
Portanto, é basicamente um M (M (M (MVC) C) C) C;)
Observe que alguns iniciadores e até mesmo alguns tutoriais —muito básicos— mesclam / copiam / nivelam as propriedades da entidade no bean gerenciado, o que efetivamente tornaria o controlador um modelo. Desnecessário dizer que este é um design pobre (ou seja, não é um design MVC limpo).
Os snippets de código nas seguintes respostas ilustram a abordagem MVC certa:
No livro The Definitive Guide to JSF in Java EE 8 , no capítulo 8 "Backing beans", página 276, o diagrama de Venn abaixo é usado para ilustrar a posição do backing bean no paradigma MVC dentro do contexto relevante para o desenvolvedor JSF . Aviso de isenção de direitos autorais: o livro foi escrito por mim e a imagem foi criada por mim.
<h:inputText value="#{register.username}">
vez de <h:inputText value="#{register.user.name}">
.
M odel seria seuManagedBean
V iew seria jsp
, XHTML
(bem você pode acomodar vários pontos de vista aqui)
O controlador seráFacesServlet
Atualização, espero que esta imagem ajude mais
FacesServlet
for um controlador não posso estendê-lo. Não posso ter meus próprios controladores ... Concordo com Shervin que Managed Beans é o controlador. Shervin, que tal postar sua própria resposta alternativa?
FacesServlet
que está controlando.
O servlet faces gerencia o ciclo de vida das faces, então, nesse sentido, é o controlador combinado com seu próprio código que pode ser chamado durante cada fase do ciclo de vida
Java Server Faces é uma estrutura web MVC onde os componentes MVC são os seguintes,
Modelo - é a classe de bean gerenciado anotada com @ManagedBean, que possui propriedades para conter os dados e respectivos getters e setters. A classe de bean gerenciado também pode conter a lógica de negócios. Eles também são conhecidos como beans de apoio, que podem ter escopos diferentes, como solicitação, sessão, aplicativo.
Exibir - A interface do usuário mostrada ao cliente, ou seja, arquivos .xhtml. Ele obtém os dados dos beans gerenciados e é processado como a resposta.
Controller - javax.servlet.webapp.FacesServlet é a classe do controlador centralizado que é basicamente um servlet. Qualquer solicitação que chega ao JSF primeiro vai para o controlador FacesServlet. Ao contrário do JSP no qual escrevemos nossa própria classe de controlador, no JSF o servlet do controlador é uma parte fixa do framework e não o escrevemos.
Fluxo MVC-