[Resolvido] - Duvida JSF - Managed Bean

Galera, eu comecei a estudar JSF agora a pouco, e já estou com uma dúvida. No exemplo que peguei (em um tutorial aqui no GUJ) o ManagedBean AgendaDB tinha os dados (nome, endereco), os dados pra conexao com o banco de dados e ainda os métodos do dao para incluir e pesquisar. O managed Bean tem tudo isso mesmo dentro dele? Não tem como separar, como no struts? Eu estou com essa dúvida. Se tiver como, teria como me mostrar, dar um exemplo? Muito obrigado pessoal! Mesmo!!!

da pra separar sim, aliás, é até melhor.

por exemplo:
em vez de

usar isso

o faces (se não me engano apenas a partir do 1.2) permite você fazer DI, assim vc simplesmente tem que declarar no faces-config o seguinte:

	<managed-bean>
		<managed-bean-name>usuarioHandler</managed-bean-name>
               <!-- (...) É a partir daqui que vem a parte diferente --->
		<managed-property>
			<property-name>usuario</property-name>
			<property-class>
				foo.bar.Usuario
			</property-class>
			<value>#{usuario}</value>
		</managed-property>
	</managed-bean>

com isso vc pode pegar o usuario que esta na seção e utiliza-lo no seu action.

dessa, forma o seu action ficaria com escopo de seção request e o susário ficaria como session.

Desculpe, mas não entendi direito.

No xml onde eu coloco o managed-bean está assim:

&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;agenda&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;AgendaDB&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
&lt;/managed-bean&gt;

Porque o AgendaDB tem tudo, faz o papel de Bean e DAO.

E eu já uso

&lt;h:inputText value="#{agenda.nome}"/&gt; 

nas páginas JSP.

Se eu fosse criar um AgendaBean, ConexaoDAO e AgendaDAO como ficaria?!

Desculpe, mas eu não estou conseguindo entender, comecei hoje a ver JSF.

Obrigado pela ajuda.

nesse caso sugiro você começar com jsf utilizando o Seam.

EDITADO
Assim, você se abstrai de vários detalhes que atrapalham o seu aprendizado neste momento, e fato de você ver as coisas acontecendo funciona como um combustível para você continuar tentado aprender.

Tu pode fazer a sua classe dao separado e no Mbean do jsf chamar ela…
O Mbean serve para tu acessar os dados no jsp mas esta classe pode chamar outras classses ex: de conexão de banco de dados etc sem configurar no xml. as únicas que vc precisa declarar no xml é os Managed Bean

Entendeu?

[quote=bobmoe]nesse caso sugiro você começar com jsf utilizando o Seam.

EDITADO
Assim, você se abstrai de vários detalhes que atrapalham o seu aprendizado neste momento, e fato de você ver as coisas acontecendo funciona como um combustível para você continuar tentado aprender.[/quote]

Valeu! Vou tentar com ele também!

[quote=Mauricio de Mello]Tu pode fazer a sua classe dao separado e no Mbean do jsf chamar ela…
O Mbean serve para tu acessar os dados no jsp mas esta classe pode chamar outras classses ex: de conexão de banco de dados etc sem configurar no xml. as únicas que vc precisa declarar no xml é os Managed Bean

Entendeu?[/quote]

Entendi o que eu tenho que fazer, mas não como. Mas vou dar uma pesquisada no MBean e em como acessar os dados. Agora pelo menos já tenho uma direção! :smiley:

EDITADO
Oops, agora eu percebi o que eu fiz! Então é so eu separar em uma classe e chamar essa classe dentro no MBean que ela já pega os dados do jsp?! Nossa, que fácil! :smiley:

Valeu mesmo pela dica!!!

Isto mesmo.

Mbeans é só para integrar com o framework e seus componentes visuais…o resto continua igual.

Só mais uma coisa, se não se importa.

A navegação da página é feita pelo retorno do método que eu defino em <h:commandButton> né?

Então, eu estou fazendo um DAO separado para executar as querys SQL, só que eles não retornam nada ou retornam a pesquisa. Quando eu insiro o DAO no MBean eu faço assim:

public List&lt;String&gt; buscar(){
		return agendaDAO.buscar(nome);
	}
	
	public void inserir(){
		agendaDAO.inserir(nome, endereco, cidade, telefone);
	}

Desse jeito eu poderia moficiar esses dois métodos para retornar só string para a navegação de página e dentro do método eu executar o DAO e continuar chamando por “action=”#{agenda.buscar}" "? ficaria mais ou menos assim:

public String buscar(){
		
  if (ACHOU ALGO){
    return "sucesso"
  else {
   return "erro"
  }
}
	
public String inserir(){
   if(INSERIU){
      return "sucesso"
   else{
      return "erro"
   }
}