Pessoal estou com um problema pois minha página jsf não chama meu método na minha classe bean, abaixo segue minha página:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.request.contextPath}/resources/css/botoes.css"/>
<title>SCER - Cadastro de fabricantes</title>
</h:head>
<h:body>
<ui:composition template="/WEB-INF/template.xhtml">
<ui:define name="conteudoPrincipal">
<p:panel header="Cadastro de fabricante">
<h:form id="form">
<p:growl id="growl" showDetail="true"/>
<p:dataTable id="dataTableCadFrabricantes" var="fabricante" value="#{fabricanteMB.fabricanteDataModel}" paginator="true" rows="10"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15"
paginatorPosition="bottom"
selection="#{fabricanteMB.fabricante}" selectionMode="single">
<f:facet name="header">
Fabricantes
</f:facet>
<p:column headerText="Nome">
#{fabricante.nome}
</p:column>
<p:column headerText="Telefone">
#{fabricante.telefone}
</p:column>
<p:column headerText="Email" >
#{fabricante.email}
</p:column>
</p:dataTable>
<p:separator/>
<fieldset id="barraBotoesTelaGerenciamento">
<p:commandButton value="Cadastrar" disabled="false" actionListener="#{fabricanteMB.salvar()}" oncomplete="cadFabricante.show();"/>
<p:commandButton value="Editar" disabled="false"/>
<p:commandButton value="Excluir" disabled="false"/>
<p:commandButton value="Visualizar" disabled="false"/>
</fieldset>
<p:dialog id="dlgCadastrarFab" header="Cadastrar Fabricante" widgetVar="cadFabricante" resizable="false" modal="true" minHeight="400" width="400">
<h:panelGrid id="pngCadastrar" columns="2" cellpadding="4">
<h:outputText value="Nome:" />
<p:inputText value="#{fabricanteMB.fabricante.nome}" />
<h:outputText value="Telefone" />
<p:inputText value="#{fabricanteMB.fabricante.telefone}"/>
<h:outputText value="Email" />
<p:inputText value="#{fabricanteMB.fabricante.email}" />
</h:panelGrid>
<p:separator/>
<fieldset id="barraBotoes">
<p:commandButton value="OK" actionListener="#{fabricanteMB.salvar()}" oncomplete="cadFabricante.hide();" update="dataTableCadFrabricantes,growl,dlgCadastrarFab" />
<p:commandButton value="Cancelar" onclick="cadFabricante.hide();" update="@this"/>
</fieldset>
</p:dialog>
</h:form>
</p:panel>
</ui:define>
</ui:composition>
</h:body>
</html>
Abaixo meu bean:
@ManagedBean(name = "fabricanteMB")
@RequestScoped
public class GerenciamentoFabricanteMB implements InterfaceGerenciamentoFabricante {
private Fabricante fabricante;
private FabricanteDataModel fabricanteDataModel;
public GerenciamentoFabricanteMB() {
this.fabricante = new Fabricante();
carregaDataTable();
}
public void salvar() {
System.out.println("Chamou método para cadastro.");
}
public void editar(Long idFabricante) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void deletar(ActionEvent actionEvent) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void buscarFabricantes() {
throw new UnsupportedOperationException("Not supported yet.");
}
private void carregaDataTable() {
InterfaceDao<Fabricante> interfaceDao = new FabricanteDaoImp();
this.fabricanteDataModel = new FabricanteDataModel(interfaceDao.findAll());
}
public Fabricante getFabricante() {
return fabricante;
}
public void setFabricante(Fabricante fabricante) {
this.fabricante = fabricante;
}
public FabricanteDataModel getFabricanteDataModel() {
return fabricanteDataModel;
}
public void setFabricanteDataModel(FabricanteDataModel fabricanteDataModel) {
this.fabricanteDataModel = fabricanteDataModel;
}
}
Abaixo minha classe para carregar a dataTable
public class FabricanteDataModel extends ListDataModel<Fabricante> implements SelectableDataModel<Fabricante>, Serializable {
private List<Fabricante> listaFabricantes;
public FabricanteDataModel() {
}
public FabricanteDataModel(List<Fabricante> fabricantes) {
super(fabricantes);
this.listaFabricantes = fabricantes;
}
public Object getRowKey(Fabricante t) {
return t.getIdFabricante();
}
public Fabricante getRowData(String string) {
this.listaFabricantes = (List<Fabricante>) getWrappedData();
for (Fabricante fabricante : this.listaFabricantes) {
if (!string.equals("null")) {
if (fabricante.getIdFabricante().equals(Long.valueOf(string))) {
return fabricante;
}
}
}
return null;
}
public List<Fabricante> getListaFabricantes() {
return listaFabricantes;
}
public void setListaFabricantes(List<Fabricante> listaFabricantes) {
this.listaFabricantes = listaFabricantes;
}
}
Os dados estão sendo exibidos na dataTable certinho, o problema e que quando clico no botão “Cadastrar” meu método “salvar” não e chamado, não estou entendendo porque ele não esta sendo chamado, se alguem puder me ajudar a agradeço, estou usando a versão 3.4 do prime e o jsf 2x.