JSF + Backing bean

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

[code]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 !";   }[/code]

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?

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!

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

Obrigado

A classe:

[code]
// 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;
}

}[/code]

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:

[code]

backingBean
sua.estrutura.de.pacoets.BackingBean
session

// e é claro, configura as regras de navegação para o retorn “sucesso”[/code]

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

Até mais!

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

[code]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)

[/code]

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

Até mais!