Quais componentes são MVC no framework JSF MVC?

Respostas:

150

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.

insira a descrição da imagem aqui

BalusC
fonte
+1 Concordo totalmente com ambas as filosofias, geralmente é mais o caso com arco grande. visualizar em projetos em tempo real.
Jigar Joshi
2
não entendeu o trocadilho, ainda tem um upvoat
Nick Russler
@JeffLee no meu trabalho, vemos isso como os beans gerenciados controlam a visualização xhtml. Beans gerenciados podem conversar com o código do modelo para obter e salvar entidades, dependendo do que a visualização precisa.
djeikyb
5
@Jeff: é isso apenas se você misturar as propriedades do modelo nele. Tipo, usando em <h:inputText value="#{register.username}">vez de <h:inputText value="#{register.user.name}">.
BalusC de
Concordo totalmente com esta resposta em detrimento da resposta de @Jigar. IMO, os beans gerenciados são muito mais do que um modelo. Eles são uma espécie de extensão do FacesServlet, onde toda a interação acontece. Também são capazes de manter o estado, mas muito mais um C do que um M.
Xtreme Biker
36

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

insira a descrição da imagem aqui

Jigar Joshi
fonte
4
+1, faz sentido, embora eu talvez diria que seu modelo são as entidades (se houver) e o controlador são os feijões gerenciados (além do FacesServlet)
Shervin Asgari
@Jigar bem, se FacesServletfor 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?
yegor256
1
é disfarçado FacesServletque está controlando.
Jigar Joshi
A wikipedia @Jigar diz que "Um controlador aceita a entrada do usuário e instrui o modelo e a janela de visualização a executar ações com base nessa entrada." Duvido que FacesServlet "instrua o modelo", certo?
yegor256
4
Undercover FacesServlet recebe todos os dados (na camada acima, é chamado de bean) da solicitação, sessão, contexto do aplicativo e os processa.
Jigar Joshi
-1

Java Server Faces é uma estrutura web MVC onde os componentes MVC são os seguintes,

  1. 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.

  2. 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.

  3. 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-

insira a descrição da imagem aqui

Hetal Rachh
fonte
Isso é idêntico às 36 perguntas votadas. Se você acha que a resposta pode ser mais clara, edite-a
Kukeltje
@Kukeltje Eu acredito que minha resposta tem mais explicação do que apenas nomear os componentes MVC.
Hetal Rachh
Muito pouco mais de explicação ... 1: não realmente, pois 'conter dados' não é a melhor coisa (deveria estar em entidades), businesslogic, não é a melhor coisa já que estes deveriam estar em serviços (veja os links adicionais na resposta mais votada ), 2: não muito mais 3: um pouco mais de texto mas faltando a imagem da outra resposta que torna mais claro do que o texto que você adicionou ...
Kukeltje
@Kukeltje Obrigado, mas sou apenas um iniciante no JSF.
Hetal Rachh
Sem problemas. Eu já uso há muito tempo com grande sucesso. Obtenha o livro java ee 8 e jsf de Bauke Scholtz e Arjan Thijms. Ótima leitura e tutorial, mas também leia todos os> 25 Q / A votados no Stackoverflow, lembre-se de sua existência e comece com jsf 2.3 e
Kukeltje