Dúvida na arquitetura de projeto web com mvc e jsf

Estou com dúvida em como criar a arquitetura de uma aplicação web com mvc e jsf. Sei que existes os beans, classes normais, view, so que nao sei o padrao para criar esses, e em quais camadas colocar, alguém pode ajudar?

Ola prjava!! Eu estou fazendo um trabalho da faculdade com essas tecnologias. Seus beans ficam na camada de model, sua logica de negocio (métodos) em uma servlet na camada de controle e com jsf as views são em xhtml ficam na webcontent mesmo. Estou no começo do aprendizado de web, me corrijam se eu tiiver me equivocado.

Pode criar uma camada para colocar seus java beans (Modelo), outra para manipular os dados (Vai usar JDBC ou JPA??), uma para colocar seus ManagedBeans (Controller), e a camada de visão onde ira, as páginas XHTML (Facelets), CSS, JavaScript, etc.

valeu, e qual a diferença de java beans para ManagedBeans . Tipo, vo ter uma classe java bean e uma classe MangeBeans, como vão ser essas classes?

Olá com a ajuda dos colegas já deu pra você ter noção bastante de como deve ficar a estrutura do seu projeto.
A respeito do bean e do managed bean.

Classe BEAN

class Produto{

private Integer id;
private String nome;

//get&set

Configurando através de faces-config que fica dentro da pasta WebContent > WEB-INF

 	<managed-bean>
	<managed-bean-name>produto</managed-bean-name>
	<managed-bean-class>seupackage.Produto</managed-bean-class>
	<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>

Ou atráves de Annotations na própria classe ficaria assim

[code]@ManagebBean(name=“produto”)
@RequestScoped
class Produto{

private Integer id;
private String nome;[/code]

E agora? o que faço depois que ja configurei minha classe como consigo acessar cada campo?
Na sua VIEW (Páginas XHTML) que irá utilizar para criação de páginas ficaria assim, considerando que você tenha apenas um campo para acessar

<h:form> <h:outputLabel value="Nome:" for="nome"/> <h:inputText id="nome" label="Nome" value="#{produto.nome}" required="true" requiredMessage="Digite seu nome "/> <h:commandButton action="chamapagina" value="Salvar"></h:commandButton> </h:form>

Obrigado. e onde vc acha que devo colocar os metodos de um produto? Pelo que entendi até agora, vc faz a classe ai como vc fez, produto, que chamam de pojo, depois vc faz outra classe com os metodos de um produto, essa sim vai ter o annotations e o nome de produdoBean e instancia um um produto nela, e com isso alimenta todos os metodos nessa clase. Na view vc chama esses metodos, e acessa os campos da classe produto. Essa classe produtoBean que farar a intermediação do view com a classe produto, essa com o banco de dados. Até agora nunca conseguier encontrar ou entender uma padrão para criançao de beans, pojo. Muitas pessoas fazem por seu proprio jeito.

Entenda bem.

Eu não criei outra classe Produto, para configurar sua classe produto atraves de Annotations, você basta colocar na sua classe produto as anotações que foi citada, certo? vamos supor agora que eu quero criar um metodo que quando eu clicar no botao salvar ele me retorne uma pagina produto salvo com sucesso.

Na sua classe Produto você criar um método

public String salvar() { return "sucesso" }

voltando a VIEW (Páginas XHTML) você irá colocar a seguinte instrução no botão para que ele chame essa página através do método.

<h:commandButton action="#{produto.salvar}" value="Salvar" ></h:commandButton>
O que você precisa agora é criar uma pagina chamado paginausuariosucesso.xhtml para ele conseguir acessar atraves do método a pagina de destino.

E agora será que funciona? NÃO!
O que precisa fazer? então… segue abaixo mas uma configuração que deve está na sua faces-config

<navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>sucesso</from-outcome> <to-view-id>/paginausuariosucesso.xhtml</to-view-id> </navigation-case> </navigation-rule>

Deixa eu explicar o que faz cada instrução dessa.

Em from-view-id, indica qual pagina você quer mapear, no caso o (*) indica para todas as páginas, se você quiser mapear para alguma página especifica voce colocaria a pagina que tem o botão chamando o método.

Dentro de navigation-case voce tem from-outcome, essa é o nome que voce esta dando para a pagina que vai ser chamada atraves no método, é como se voce falasse, me retorne a paginausuariosucesso.xhtml para todos os métodos que return “sucesso”;

Em to-view-id voce fala para qual página o return “sucesso” deverá retornar, no caso apontei para paginausuariosucesso.xhtml.

Espero ter entendido! Valeu!

Eu sei, vc entendeu errado, mas foi minha culpa, coloquei de forma ambígua, quando disse “voçê” nao estava falando de vc, estava falando em qualquer um que fosser fazer esse processo que eu falei, entendeu?. Mas dizem que uma classe bean so deve ter os atributos, construtor vazio e os get e set. Mas pelo que vejo as pessoas seguem e nao seguem essa padrão, muitas fazem desse jeito ai que te falei…entao seria bom se tivese um padrão estabelicido para isso, como criar a bean, onde, o que pode ter ou nao na bean, etc!