Prime Faces + ActionListener do commandbutton não invoca metodo Bean :$[RESOLVIDO]
23 respostas
franz_Ozil
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 .
importjavax.inject.Named;importjavax.enterprise.context.SessionScoped;importjava.io.Serializable;importjava.util.ArrayList;importjava.util.List;importjavax.faces.application.FacesMessage;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ViewScoped;importjavax.faces.context.FacesContext;importjavax.faces.event.ActionEvent;/** * * @author f.aquino */@Named(value="clienteBean")@ViewScoped@SessionScoped@ManagedBeanpublicclassClienteBeanimplementsSerializable{privateCadclienteCliente;privateList<Cadcliente>Clientes;publicClienteBean(){Cliente=newCadcliente();}publicvoidInserirCliente(ActionEventactionEvent){FacesContextcontext=FacesContext.getCurrentInstance();CadClienteDAOClienteDao=newCadCLienteImpl();ClienteDao.Inserir(Cliente);context.addMessage(null,newFacesMessage("Cadastro Concluido com Sucesso !"));}
@ViewScoped@SessionScoped@ManagedBean(name="clienteBean")publicclassClienteBeanimplementsSerializable{privateCadclienteCliente;privateList<Cadcliente>Clientes;publicClienteBean(){Cliente=newCadcliente();}publicvoidInserirCliente(){FacesContextcontext=FacesContext.getCurrentInstance();CadClienteDAOClienteDao=newCadCLienteImpl();ClienteDao.Inserir(Cliente);context.addMessage(null,newFacesMessage("Cadastro Concluido com Sucesso !"));}
importjava.io.Serializable;importjavax.faces.application.FacesMessage;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.SessionScoped;importjavax.faces.context.FacesContext;importcom.teste.pojos.Cliente;@ManagedBean(name="clienteBean")@SessionScopedpublicclassClienteBeanimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateClientecliente;publicClienteBean(){cliente=newCliente();}publicvoidinserirCliente(){System.out.println("Passei pelo inserirCliente !!!");//chama aqui o seu DAOFacesContextcontext=FacesContext.getCurrentInstance();context.addMessage(null,newFacesMessage("Cadastro Concluido com Sucesso !"));}publicClientegetCliente(){returncliente;}publicvoidsetCliente(Clientecliente){this.cliente=cliente;}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.org/ui"><h:head><title>Cadastro</title></h:head><h:body><h:formid="cadastroCliente"><p:growlid="growl"showDetail="true"sticky="true"/><h:panelGridid="display"columns="3"cellpadding="8"style="margin:0 auto;"><h:outputTextvalue="Nome :"/><h:outputTextvalue="Idade:"/><h:outputTextvalue="Sexo:"/><p:inputTextvalue="#{clienteBean.cliente.nome}"style="width: 250px;"/><p:inputTextvalue="#{clienteBean.cliente.idade}"style="width: 25px;"/><p:selectOneMenuvalue="#{clienteBean.cliente.sexo}"><f:selectItemitemLabel="Selecione"itemValue=""/><f:selectItemitemLabel="Masculino"itemValue="Masculino"/><f:selectItemitemLabel="Feminino"itemValue="Feminino"/></p:selectOneMenu><h:outputTextvalue="RG:"/><h:outputTextvalue="Telefone:"/><h:outputTextvalue="Endereço:"/><p:inputTextvalue="#{clienteBean.cliente.rg}"style="width: 250px;"/><p:inputTextvalue="#{clienteBean.cliente.fone}"style="width: 250px;"/><p:inputTextvalue="#{clienteBean.cliente.end}"style="width: 250px; text-align: left;"/></h:panelGrid><p:separator/><p:commandButtonvalue="Salvar"update="growl"actionListener="#{clienteBean.inserirCliente}"/></h:form></h:body></html>
Espero que ajude !!!!
franz_Ozil
mas no metodo inserir não precisa do Action Event?
franz_Ozil
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.
V
Valeio_Bezerra
Eu utilizo sem rs
hmsilva
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.
hmsilva
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.
franz_Ozil
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
franz_Ozil
tenho 2 forms , o que ocorria hm silva?
V
Valeio_Bezerra
pode ser por causa dos 2 forms mesmo, eu tinha problemas com eles nesse ponto de chamar a ação do botão.
franz_Ozil
e como vc resolveu ?
hmsilva
A POC que te mandei não funcionou no seu ambiente…??? estranho, porque no meu funcionou, e estou usando o prime 3.4.1.
hmsilva
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.
V
Valeio_Bezerra
tirei um dos forms. No caso o segundo form
D
duzackzack
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
hmsilva
Cara, no JSF 2 não é mais necessario o arquivo face-config.xml
hmsilva
Posta o seu xhtml como era antes (com 2 forms) pra eu dar uma olhada …
V
Valeio_Bezerra
Rapaz isso faz tempo. é só tirar um dos seus forms.
franz_Ozil
tirei o action event coloquei o ajax= “false” agora esta dando esta excessão …
pessoal perdi uma noite de sono kkk tentando e tentando e não consegui descobrir nada , apenas que fica variando tem hora que o erro postado acima , tem hora que não acontece nd … ta fooda rs
franz_Ozil
estou confuso , pois eu coloquei o ajax=“false” ele conseguiu verificar que meu campo idade e inteiro , mas se eu preencho certo ele não salva e nem entra no meu metodo de inserção …
Pessoal consegui resolver , depois de muita lutaaa era um simples detalhe.
o modo como eu chamava meu metodo bean .
antes
actionListener="#{clientesBean.inserirCliente()}"
depois
actionListener="#{clientesBean.getinserir()}"
lendo um pouco descobri que no XHTML interpretado os metodos como getters e setters , eu não levei muita fé mas funcionou muito obrigado a todos
ah e tmb ajax= “false” .