JSF + Backing bean

5 respostas
rodrigodsw2005

Estou com dificuldade em funcionar o meu código. Estou aprendendo o JSF e não estou conseguindo funcionar... olhem só:

<h:inputText value="#{BeanCadastro.nome}"/><BR>
<h:inputText value="#{BeanCadastro.telefone}"/><BR>
<h:commandButton type="submit" action="#{Cadastro.armazena}" value ="inserir"/>
Cadastro
public String armazena(  HttpServletRequest request,
     HttpServletResponse response   ){
         try{
         BeanCadastro b = new BeanCadastro();
         DaoCadastro dao = new DaoCadastro();
        
        b.setNome((String) request.getParameter("nome") );
        b.setTelefone((String) request.getParameter("telefone"));
      
        dao.Salvar(b);
      }catch (Exception e){
          e.printStackTrace();
      } return "sucesso !";   }

Pergunta: como eu devo fazer o backing bean? não está certo?
Pq jsf não reconhece o metodo armazena ? Como faço pra reconhecer?

5 Respostas

davidbuzatto

Vc está misturando as coisas…

Vc precisa criar um BackingBean e no mesmo ter os componentes do formulário, para então você fazer um binding entre o formulario html e o componente no seu BackingBean, equando a ação for tomada, o BackingBean pega os valores dos componentes e trabalha com os mesmos.

Colocou o HtppServletRequest e Response no seu método. Vc náo usa esses dois objetos.

Até mas!

rodrigodsw2005

Alguem pode postar um exemplo de backing bean que atenda as necessidades do meu código, continuo não entendendo muita coisa :frowning:

Obrigado

davidbuzatto
A classe:
// backing bean (muda o nome para relacionar a entidade trabalhada)
// quando mudar o nome, vc tem que mudar a configuração no faces-config
public class BackingBean {

    // componentes do formulário
    private UIInput inputNome;
    private UIInput inputTelefone;

    // construtor
    public BackingBean() {
        iniciaComponentes();
    }
    
    // armazena os dados obtendo os mesmos dos componentes
    public String armazena() {
        
        // faça seu controle de erro...
        BeanCadastro b = new BeanCadastro();
        DaoCadastro dao = new DaoCadastro();
         
        b.setNome( (String) getInputNome().getValue() );
        b.setTelefone( (String) getInputTelefone().getValue() );
       
        dao.Salvar(b);
        
        // retirei o " !"
        return "sucesso";

    }

    // inicia os componentes (instancia os mesmos)
    private void iniciaComponentes() {
        setInputNome( new UIInput() );
        setInputTelefone( new UIInput() );
    }

    // métodos p/ acessar os componentes
    public void setInputNome( UIInput inputNome ) {
        this.inputNome = inputNome;
    }

    public void setInputTelefone( UIInput inputTelefone ) {
        this.inputTelefone = inputTelefone;
    }

    public UIInput getInputNome() {
        return inputNome;
    }

    public UIInput getInputTelefone() {
        return inputTelefone;
    }

}
No formulário:
// no seu form...
// backingBean é o nome dado no faces-config, vc pode escolher o que achar melhor
<h:inputText id="nome" value="" binding="#{backingBean.inputNome}"/><br>
<h:inputText id="telefone" value="" binding="#{backingBean.inputTelefone}"/><br>
<h:commandButton type="submit" action="#{backingBean.armazena}" value ="inserir"/>
No faces-config.xml:
<managed-bean>
    <managed-bean-name>backingBean</managed-bean-name>
    <managed-bean-class>sua.estrutura.de.pacoets.BackingBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

// e é claro, configura as regras de navegação para o retorn "sucesso"

Mais mastigado que isso não dá né :D

Até mais!

rodrigodsw2005

puts .. ta quase !!!! .... o seu código infelismente deu esse erro:

root cause 

javax.servlet.ServletException: javax.servlet.jsp.JspException: Error setting property 'inputNome' in bean of type null
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:854)
davidbuzatto

Parece que o bean não está sendo construído.
Provavelmente é a forma que você o está utilizando…

Até mais!

Criado 3 de agosto de 2007
Ultima resposta 3 de ago. de 2007
Respostas 5
Participantes 2