Estou estudando Richfaces e estou com alguns problemas, estou tentando fazer um simples CRUD, tenho um banco MySQL e estou usando Hibernate. Eu já consigo lista o conteúdo da tabela Empresa em uma dataTable, ai coloquei dois links nas linhas, um para excluir o registro e outro para alterar, a exclusão também está funcionando sem problemas, mas para a edição não está funcionando.
Quando eu clico em editar ele abre o conteúdo do registro em um popupPanel com um a4j:commandButton para salvar, o problema que ele não salva. Segue abaixo o meu codigo.
dataTable
<rich:dataTable value="#{empresaController.todasEmpresas}" var="empresa" iterationStatusVar="it" id="table" rows="15" rowClasses="odd-row, even-row" styleClass="stable">
<h:inputHidden value="#{empresa.idEmpresa}" />
<rich:column>
<f:facet name="header">#</f:facet>
#{it.index+1}
</rich:column>
<rich:column>
<f:facet name="header">Razão Social</f:facet>
<h:outputText value="#{empresa.razaoSocial}" />
</rich:column>
<rich:column>
<f:facet name="header">Fantasia</f:facet>
<h:outputText value="#{empresa.fantasia}" />
</rich:column>
<rich:column>
<f:facet name="header">CGC</f:facet>
<h:outputText value="#{empresa.cgc}" />
</rich:column>
<rich:column>
<f:facet name="header">Status</f:facet>
<h:outputText value="#{empresa.status}" />
</rich:column>
<rich:column>
<f:facet name="header">Tipo de Empresa</f:facet>
<h:outputText value="#{empresa.tipoEmpresa}" />
</rich:column>
<rich:column>
<f:facet name="header">Ações</f:facet>
<a4j:commandLink styleClass="no-decor" execute="@this" render="@none"
oncomplete="#{rich:component('confirmPane')}.show()">
<h:graphicImage value="/images/icons/delete.gif" alt="delete" />
<a4j:param value="#{empresa.idEmpresa}" assignTo="#{empresaController.currentEmpresaIndex}" />
</a4j:commandLink>
<a4j:commandLink styleClass="no-decor" render="editGrid" execute="@this" oncomplete="#{rich:component('editPane')}.show()">
<h:graphicImage value="/images/icons/edit.gif" alt="edit" />
<a4j:param value="#{empresa.idEmpresa}" assignTo="#{empresaController.currentEmpresaIndex}" />
<f:setPropertyActionListener target="#{empresaController.empresaSelecionada}" value="#{empresa}" />
</a4j:commandLink>
</rich:column>
<f:facet name="footer">
<rich:dataScroller page="#{empresaController.page}" />
</f:facet>
</rich:dataTable>
popupPanel
<rich:popupPanel header="Alterar Empresa" id="editPane" autosized="true" width="400" height="200">
<h:panelGrid columns="3" id="editGrid">
<h:inputHidden value="#{empresaController.empresaSelecionada.idEmpresa}" />
<h:outputText value="Razao Social" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.razaoSocial}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado a Razão Social da Empresa"/>
<h:panelGroup />
<h:outputText value="Fantasia" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.fantasia}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o nome fantasia da Empresa"/>
<h:panelGroup />
<h:outputText value="CGC" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.cgc}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o CGC da Empresa" />
<rich:message id="priceMsg" for="price" />
<h:outputText value="Status" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.empresaSelecionada.status}" size="1">
<f:selectItems value="#{empresaController.listaStatus}" />
</h:selectOneListbox>
<h:panelGroup />
<h:outputText value="Tipo de Empresa" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.empresaSelecionada.tipoEmpresa}" size="1">
<f:selectItems value="#{empresaController.tiposEmpresa}" />
</h:selectOneListbox>
</h:panelGrid>
<h:panelGroup />
<a4j:commandButton value="Salvar" action="#{empresaController.alterar}" render="table" execute="editPane"
oncomplete="if (#{facesContext.maximumSeverity==null}) {#{rich:component('editPane')}.hide();}" />
<a4j:commandButton value="Cancelar" onclick="#{rich:component('editPane')}.hide(); return false;" />
</rich:popupPanel>
ManagedBean
@Named(value = "empresaController")
@ManagedBean
@SessionScoped
public class EmpresaController implements Serializable {
/**
* Creates a new instance of EmpresaController
*/
private static final int CLIENT_ROWS_IN_AJAX_MODE = 15;
private Empresa e;
private Empresa empresaSelecionada;
private DaoEmpresa dao;
private DataModel listaEmpresa;
private List<Empresa> todasEmpresas;
private List<SelectItem> tiposEmpresa;
private List<SelectItem> listaStatus;
private int page = 1;
private int currentEmpresaIndex;
private int clientRows;
..............................
public List<Empresa> getTodasEmpresas() {
dao = new DaoEmpresa();
todasEmpresas = dao.listarTodos();
System.out.println("Listando empresas ...............................................................................");
return todasEmpresas;
}
public void remove() {
dao = new DaoEmpresa();
dao.deletar(currentEmpresaIndex);
}
public void salvar() {
dao = new DaoEmpresa();
dao.salvar(e);
}
public void alterar() {
System.out.println("Alterando .........................................................................................");
dao = new DaoEmpresa();
dao.alterar(empresaSelecionada);
}
//gets e sets
}
Eu coloquei ate uns prints nos métodos e a impressão é que ele nem chega a entrar no método alterar.
Alguém pode me dar uma ajuda?