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 !"));
}
hmsilva
Novembro 26, 2012, 4:02pm
#4
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.
hmsilva
Novembro 26, 2012, 4:10pm
#8
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
Novembro 26, 2012, 4:13pm
#9
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.
hmsilva
Novembro 26, 2012, 4:39pm
#14
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
Novembro 26, 2012, 4:41pm
#15
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
hmsilva
Novembro 26, 2012, 6:39pm
#18
Cara, no JSF 2 não é mais necessario o arquivo face-config.xml
hmsilva
Novembro 26, 2012, 6:39pm
#19
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.