Prime Faces + ActionListener do commandbutton não invoca metodo Bean :$[RESOLVIDO]

Oláaa Pessoal , Estou desenvolvendo um CRUD utilizando prime faces para aprendizado … fiz toda a parte DAO e Controle e agora fui para o formularios e me deparei com este problema:

clico no botão cadastra nada acontece , não chama o meu metodo bean pode me ajudar .

XHTML

    <h:form id="FrmNovoCliente">
            <p:dialog header="Novo Cliente " widgetVar="ClienteDialog" resizable="false" id="ClienteDialog" modal="true">  
                <p:growl id="growl" showDetail="true" sticky="true" />  
                <h:panelGrid id="display" columns="3" cellpadding="8" style="margin:0 auto;">  


                    <h:outputText value="Nome :"/>  
                    <h:outputText value="Idade:"/>  
                    <h:outputText value="Sexo:" />  
                    <p:inputText value="#{clienteBean.cliente.nome}" style="width: 250px;"/>
                    <p:inputText value="#{clienteBean.cliente.idade}" style="width: 25px;"/>
                    <p:selectOneMenu value="#{clienteBean.cliente.sexo}">  
                        <f:selectItem itemLabel="Selecione" itemValue="" />  
                        <f:selectItem itemLabel="Masculino" itemValue="Masculino" />  
                        <f:selectItem itemLabel="Feminino" itemValue="Feminino" />  

                    </p:selectOneMenu>  

                    <h:outputText value="RG:" />  
                    <h:outputText value="Telefone:" />  
                    <h:outputText value="Endereço:" />  
                    <p:inputText value="#{clienteBean.cliente.rg}" style="width: 250px;"/>
                    <p:inputText value="#{clienteBean.cliente.fone}" style="width: 250px;"/>
                    <p:inputText value="#{clienteBean.cliente.end}" style="width: 250px; text-align: left;"/>
                </h:panelGrid>  

                <p:separator/>
                <p:commandButton   value="Salvar"   update=":FrmClientes"   actionListener="#{clienteBean.inserirCliente(actionEvent)}"   oncomplete="ClienteDialog.hide()"  image="" />
                <p:commandButton   value="Cancelar" update=":FrmClientes" oncomplete="ClienteDialog.hide()"  image="" />  
            </p:dialog>  

        </h:form>

Classe Bean

import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;


/**
 *
 * @author f.aquino
 */
@Named(value = "clienteBean")
@ViewScoped
@SessionScoped
@ManagedBean
public class ClienteBean implements Serializable {

    private Cadcliente Cliente;
    private List<Cadcliente> Clientes;

    public ClienteBean() {
        Cliente = new Cadcliente();

    }


    public void InserirCliente(ActionEvent actionEvent) {
        FacesContext context = FacesContext.getCurrentInstance();
       CadClienteDAO ClienteDao = new CadCLienteImpl();
            ClienteDao.Inserir(Cliente);
            context.addMessage(null, new FacesMessage("Cadastro Concluido com Sucesso !"));
   


    }

Altere aqui:

<p:commandButton   value="Salvar"   update=":FrmClientes"   actionListener="#{clienteBean.inserirCliente()}" 

E deixe a classe assim:


@ViewScoped  
@SessionScoped  
@ManagedBean (name="clienteBean") 
public class ClienteBean implements Serializable {  
  
    private Cadcliente Cliente;  
    private List<Cadcliente> Clientes;  
  
    public ClienteBean() {  
        Cliente = new Cadcliente();  
  
    }  
  
  
    public void InserirCliente() {  
        FacesContext context = FacesContext.getCurrentInstance();  
       CadClienteDAO ClienteDao = new CadCLienteImpl();  
            ClienteDao.Inserir(Cliente);  
            context.addMessage(null, new FacesMessage("Cadastro Concluido com Sucesso !"));  
     
  
  
    }  

Segue uma POC bem simples pra vc testar.

[code]public class Cliente {

private String nome;
private String idade;
private String sexo;
private String fone;
private String rg;
private String end;

public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getIdade() {
	return idade;
}
public void setIdade(String idade) {
	this.idade = idade;
}
public String getSexo() {
	return sexo;
}
public void setSexo(String sexo) {
	this.sexo = sexo;
}
public String getFone() {
	return fone;
}
public void setFone(String fone) {
	this.fone = fone;
}
public String getRg() {
	return rg;
}
public void setRg(String rg) {
	this.rg = rg;
}
public String getEnd() {
	return end;
}
public void setEnd(String end) {
	this.end = end;
}

}[/code]

[code]
import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import com.teste.pojos.Cliente;

@ManagedBean(name=“clienteBean”)
@SessionScoped
public class ClienteBean implements Serializable {

private static final long serialVersionUID = 1L;
private Cliente cliente;

public ClienteBean(){
	cliente = new Cliente();		
}

public void inserirCliente(){
	System.out.println("Passei pelo inserirCliente !!!");
	//chama aqui o seu DAO

	FacesContext context = FacesContext.getCurrentInstance();
	context.addMessage(null, new FacesMessage("Cadastro Concluido com Sucesso !")); 
}

public Cliente getCliente() {
	return cliente;
}

public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}

}[/code]

[code]

<h:head>
Cadastro
</h:head>
<h:body>
<h:form id=“cadastroCliente”>

        <p:growl id="growl" showDetail="true" sticky="true" />    
        <h:panelGrid id="display" columns="3" cellpadding="8" style="margin:0 auto;">    


            <h:outputText value="Nome :"/>    
            <h:outputText value="Idade:"/>    
            <h:outputText value="Sexo:" />    
            <p:inputText value="#{clienteBean.cliente.nome}" style="width: 250px;"/>  
            <p:inputText value="#{clienteBean.cliente.idade}" style="width: 25px;"/>  
            <p:selectOneMenu value="#{clienteBean.cliente.sexo}">    
                <f:selectItem itemLabel="Selecione" itemValue="" />    
                <f:selectItem itemLabel="Masculino" itemValue="Masculino" />    
                <f:selectItem itemLabel="Feminino" itemValue="Feminino" />    

            </p:selectOneMenu>    

            <h:outputText value="RG:" />    
            <h:outputText value="Telefone:" />    
            <h:outputText value="Endereço:" />    
            <p:inputText value="#{clienteBean.cliente.rg}" style="width: 250px;"/>  
            <p:inputText value="#{clienteBean.cliente.fone}" style="width: 250px;"/>  
            <p:inputText value="#{clienteBean.cliente.end}" style="width: 250px; text-align: left;"/>  
        </h:panelGrid>    

        <p:separator/>  
        <p:commandButton   value="Salvar"   update="growl"   actionListener="#{clienteBean.inserirCliente}" />  
        	
</h:form>

</h:body>

[/code]

Espero que ajude !!!

mas no metodo inserir não precisa do Action Event?

Valeio Bezerra não funcionou cara , deve ser alguma cosinha to quebrando a cabeça aqui , por que não da nenhum erro , acontece nada.

Eu utilizo sem rs

Não precisa … neste caso vc não precisa de nada do evento, por isso não precisa dele na assinatura do metodo no bean.

franz Ozil,

Vc possui mais que um form no seu xhtml ?
Ja tive problemas parecidos quando tentei usar mais que um form no mesmo xhtml.

posta seu xhtml completo.

não funcionou não , Hmsilva esse POC que você mandou e bem semelhante ao que eu estou fazendo ^^ será que é algum bug do prime faces 3.4.1 ? realmente não sei onde eu errei … é foda kk

tenho 2 forms , o que ocorria hm silva?

pode ser por causa dos 2 forms mesmo, eu tinha problemas com eles nesse ponto de chamar a ação do botão.

e como vc resolveu ?

A POC que te mandei não funcionou no seu ambiente…??? estranho, porque no meu funcionou, e estou usando o prime 3.4.1.

Cara, pra ser bem sincero não descobri o motivo exato do erro. Só identifiquei que quando eu tinha mais que um form os requests não funfavão.
Ai então (eu tinha essa possibilidade) passei a usar somente um form por arquivo e o problema acabou.

Tb identifiquei que eu estava usando desnecessariamente muitos forms. Com apenas 1 form eu faço tudo que preciso.

tirei um dos forms. No caso o segundo form

Se voce tirar o parametro que esta passando dentro do seu actionListerner já ira funcionar, isto na pagina xhtml, e não esqueça de mapear o seu managedBean face-config.xml

Cara, no JSF 2 não é mais necessario o arquivo face-config.xml

Posta o seu xhtml como era antes (com 2 forms) pra eu dar uma olhada …

Rapaz isso faz tempo. é só tirar um dos seus forms.