Prime Faces + ActionListener do commandbutton não invoca metodo Bean :$[RESOLVIDO]
23 respostas
F
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 !!!!
F
franz_Ozil
mas no metodo inserir não precisa do Action Event?
F
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
H
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.
H
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.
F
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
F
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.
F
franz_Ozil
e como vc resolveu ?
H
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.
H
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
H
hmsilva
Cara, no JSF 2 não é mais necessario o arquivo face-config.xml
H
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.
F
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
F
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” .