Boa tarde Galera.
Eu estou com um problema chato que acho que alguem já deve ter passado por isto.
Em um cadastro simples foram divididos em duas partes, superior tendo os campos para efetuar o novo cadastro, e na parte inferior um datatable, contendo todos usuários cadastrados.
Foi setado para este datatable a forma single selection, passando o objeto usuário que se encontra no bean.
Porem os botões para efetuar as alterações são fora de cada row ( não sendo uma coluna da tabela)
Porem ai que está um problema, desta forma passando o objeto usuário, eu consigo efetuar a deleção e a alteração do usuário cadastrado nem nenhum problema, porem ao cadastrar um novo usuário e salvar, no bean o usuário está vindo null, e se retirar as referencias da datatable (rowKey="#{usuarioController.usuario.id}" e selection="#usuarioController.usuario}") o salvar funciona normalmente, porem o alterar e o excluir não!
Alguem saberia o que poderia ser isto.
Estou utilizando a versão 3.3.1 do primefaces
Pagina XHTML
<?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:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<!-- <ui:composition template="/home.xhtml">
<ui:define name="corpo">-->
<h:head>
<title>
<h:outputText value="Administração de Usuários" />
</title>
</h:head>
<p:dialog visible="true" minHeight="600" minWidth="720" closable="true" header="Administração usuário" >
<h:body>
<h:form id="usuarioForm">
<center>
<p:panel id="painelCadastro"
style="text-align:left;width:700px;" >
<h:panelGrid columns="3" cellpadding="3" style="font-size: 14px; font-style: Times New Roman">
<h:outputLabel value="Codigo:" />
<p:inputText id="idUsuario" size="5" value="#{usuarioController.usuario.id}" disabled="true"/>
<h:outputLabel value="" />
<h:outputLabel value="Nome:" />
<p:inputText id="nomeUsuario" size="50" value="#{usuarioController.usuario.nome}" />
<h:outputLabel value="" />
<h:outputLabel value="Endereço:" />
<p:inputText id="enderecoUsuario" size="50" value="#{usuarioController.usuario.endereco}"/>
<h:outputLabel value="" />
<h:outputLabel value="Login" />
<p:inputText id="loginlUsuario" size="30" value="#{usuarioController.usuario.login}" />
<h:outputLabel value="" />
<h:outputLabel value="Email" />
<p:inputText id="emailUsuario" size="30" value="#{usuarioController.usuario.email}" />
<h:outputLabel value="" />
<h:outputLabel value="Ativo" />
<p:inputText id="ativoUsuario" size="30" value="#{usuarioController.usuario.ativo}" />
<h:outputLabel value="" />
<h:outputLabel value="Senha:" />
<p:inputText id="senhaUsuario" size="20" value="#{usuarioController.usuario.senha}" requiredMessage="Senha obrigatória" >
</p:inputText>
<h:outputLabel value="" />
</h:panelGrid>
<br />
<center>
<p:commandButton value="Gravar" action="#{usuarioController.gravar()}" update="painelCadastro" />
<p:commandButton type="reset" value="Limpar" update="painelCadastro" />
</center>
</p:panel>
<p:panel id="painelConsulta"
header="Lista de usuários cadastrados"
style="text-align:left;width:700px;" >
<p:dataTable value="#{usuarioController.listaUsuarios}"
id="tabela"
emptyMessage="Nenhum registro encontrado"
rowIndexVar="var"
paginator="true"
paginatorPosition="bottom"
selectionMode="single"
rowKey="#{usuarioController.usuario}"
selection="#{usuarioController.usuario.id}"
draggableColumns="true"
rows="10"
first="0"
var="usuario">
<p:column>
<f:facet name="header">
<h:outputText value="ID" />
</f:facet>
<h:outputText value="#{usuario.id}" styleClass="letra1" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{usuario.nome}" styleClass="letra1" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Email" />
</f:facet>
<h:outputText value="#{usuario.email}" styleClass="letra1" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Login" />
</f:facet>
<h:outputText value="#{usuario.login}" styleClass="letra1" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Endereco" />
</f:facet>
<h:outputText value="#{usuario.endereco}" styleClass="letra1" />
</p:column>
<f:facet name="footer">
<p:commandButton value="Alterar" update="usuarioForm">
<f:setPropertyActionListener target="#{usuario}" value="#{usuario}" />
</p:commandButton>
<p:commandButton action="#{usuarioController.excluir()}" value="Excluir" update="usuarioForm" ajax="true" >
<f:setPropertyActionListener target="#{usuario}" value="#{usuario}" />
</p:commandButton>
</f:facet>
</p:dataTable>
</p:panel>
</center>
</h:form>
</h:body>
</p:dialog>
<!-- </ui:define>
</ui:composition>-->
</html>
BEAN
package com.health.monitor.controle;
import com.health.monitor.dao.UsuarioDAO;
import com.health.monitor.entidade.Usuario;
import com.health.monitor.util.BeanFactory;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name = "usuarioController")
@ViewScoped
public class UsuarioController {
private Usuario usuario = new Usuario();
private List<Usuario> listaUsuarios = new ArrayList<Usuario>();
private UsuarioDAO usuarioDAO = (UsuarioDAO) BeanFactory.getBean("usuarioDAO", UsuarioDAO.class);
private String confirmaSenha;
private Usuario usuarioSelecionado = new Usuario();
public UsuarioController() {
atualizarTela();
}
/**
* Limpa os campos input e atualiza a lista de usuários cadastrados
*/
public void atualizarTela() {
usuario = new Usuario();
listaUsuarios = getUsuarioDAO().buscarTodos();
}
/**
* Grava novo registro ou atualiza um registro
*/
public void gravar() {
if (usuario.getId() == null) {
getUsuarioDAO().gravar(getUsuario());
} else {
getUsuarioDAO().atualizar(getUsuario());
}
atualizarTela();
}
/**
* Exclui um registro da tabela usuario
*/
public void excluir() {
getUsuarioDAO().excluir(getUsuario());
atualizarTela();
}
public List<Usuario> getListaUsuarios() {
return listaUsuarios;
}
public void setListaUsuarios(List<Usuario> listaUsuarios) {
this.listaUsuarios = listaUsuarios;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
/**
* @return the usuarioDAO
*/
public UsuarioDAO getUsuarioDAO() {
return usuarioDAO;
}
/**
* @param usuarioDAO the usuarioDAO to set
*/
public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
this.usuarioDAO = usuarioDAO;
}
/**
* @return the confirmaSenha
*/
public String getConfirmaSenha() {
return confirmaSenha;
}
/**
* @param confirmaSenha the confirmaSenha to set
*/
public void setConfirmaSenha(String confirmaSenha) {
this.confirmaSenha = confirmaSenha;
}
/**
* @return the usuarioSelecionado
*/
public Usuario getUsuarioSelecionado() {
return usuarioSelecionado;
}
/**
* @param usuarioSelecionado the usuarioSelecionado to set
*/
public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
this.usuarioSelecionado = usuarioSelecionado;
}
}