Cara seguinte, um bean seria uma especie de intermediario entre a sua view e o seu repositorio.
Bom, digamos que voce possuia um formulario que tinha como finalidade salvar dados de uma pessoa e exibi-los em uma tabela de visualizacao; perceba que os dados sao para uma pessoa logo voce poderia ter um pessoabean, digamos, com os metodos para persistir e retornar os dados no repositorio. O que acontece e que, quando o usuario na tela preciona o butao salvar, no bean e realizado uma chamado para o metodo pertinente ao salvar e esse metodo se encarregara de salvar conforme o solicitado pelo usuario (como? depende da regra codificada), o mesmo vale para o exibir. Seguindo essa perspectiva, poderia-mos ter um bean para cada tela que tivesse no sistema, isso ajuda na organizacao e, posteriormente, na manutencao (uma tela de produto e seu produtobean, uma tela de documentos e seu documentobean, etc.). Mas toda regra possui excecoes e isso fica a seu criterio pos cada programador ver e implementa de formas diferentes, logos podemos ter beans que conversam ou nao.
Quanto a listagem, apos o processamento vc retorna a lista montada e pronto, o resto quem deve se encarregar e a view tipo
<h:dataTable value="#{pessoaBean.lista}" var="pessoa" >
<rich:column headerClass="columnWithHeigh50" >
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</rich:column>
</h:dataTable>
essa tela muda caso seja uma aplicacao desktop mas a logica no bean nao muda.
att,