Olá Amigos.
Estou com um problema no <p:dataTable> do PrimeFaces 3.5
Tenho um CRUD básico, quando listo meus registro no <p:dataTable> tenho um botão ALTERAR e EXCLUIR.
O Excluir funciona normalmente, porém o ALTERAR abre meu <p:dialog> sempre com o primeiro registro gravado na tabela.
Já fiz de tudo e não consegui resolver. Gostaria da Ajuda dos Amigos pois as vezes é algo simples que estou esquecendo.
Desde já muito Obrigado.
No botão Alterar no usuarios.xhtml:
<p:commandButton actionListener="#{usuarioController.prepararAlterarUsuario}" value="Alterar" image="ui-icon-tag" update=":dadosTabela:tabela" oncomplete="dialogUsuarios.show()" />
Na minha classe controller:
public void prepararAlterarUsuario(ActionEvent actionEvent) {
usuario = (Usuario) (listaUsuarios.getRowData());
}
UsuarioController.java
package Controller;
import Dao.UsuarioDao;
import Dao.UsuarioDaoImp;
import Model.Usuario;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
@ManagedBean
@SessionScoped
public class UsuarioController implements Serializable {
private Usuario usuario;
private transient DataModel listaUsuarios;
// Lista os Usuarios Cadastrados
public DataModel getListarUsuarios() {
List<Usuario> lista = new UsuarioDaoImp().list();
listaUsuarios = new ListDataModel(lista);
return listaUsuarios;
}
// Cadastrar & Altera os Usuários ////////////////////////////////////////
public void prepararAdicionarUsuario(ActionEvent actionEvent) {
usuario = new Usuario();
}
public void prepararAlterarUsuario(ActionEvent actionEvent) {
usuario = (Usuario) (listaUsuarios.getRowData());
}
public void adicionarUsuario(ActionEvent actionEvent) {
UsuarioDao dao = new UsuarioDaoImp();
dao.salvar(usuario);
}
///////////////////////////////////////////////////////////////////////////
// Excluir Usuarios
public void excluirUsuarios(ActionEvent actionEvent) {
Usuario usuarioTemp = (Usuario) (listaUsuarios.getRowData());
UsuarioDao dao = new UsuarioDaoImp();
dao.apagar(usuarioTemp);
usuario = new Usuario();
}
public UsuarioController() {
usuario = new Usuario();
SecurityContext context = SecurityContextHolder.getContext();
if (context instanceof SecurityContext){
Authentication authentication = context.getAuthentication();
if (authentication instanceof Authentication){
usuario.setLogin(((User)authentication.getPrincipal()).getUsername());
}
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
usuarios.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:sec="http://www.springframework.org/security/facelets/tags">
<h:head>
<title>Financeiro WEB</title>
</h:head>
<h:body>
<p:panel style="width: 700px;margin: auto;" header="Sistema Financeiro WEB"
footer="Suporte Oficial - http://suporteoficial.com.br/contato/ Fone: (47) 9914-2901">
<h:form>
<p:menubar >
<p:submenu label="Configurações" icon="ui-icon ui-icon-circle-arrow-s" rendered="#{sec:ifAnyGranted ('ADMINISTRADOR')}">
<p:menuitem value="Usuários" rendered="#{sec:ifAnyGranted
('ADMINISTRADOR')}" />
</p:submenu>
<p:submenu label="Cadastro" icon="ui-icon ui-icon-circle-arrow-s"
rendered="#{sec:ifAnyGranted('OPERADOR,ADMINISTRADOR')}" >
<p:menuitem value="Cliente" rendered="#{sec:ifAnyGranted
('OPERADOR,ADMINISTRADOR')}" />
<p:menuitem value="Fornecedores" rendered="#{sec:ifAnyGranted
('OPERADOR,ADMINISTRADOR')}" />
</p:submenu>
<p:submenu label="Relatório" icon="ui-icon ui-icon-circle-arrow-s"
rendered="#{sec:ifAnyGranted('OPERADOR,ADMINISTRADOR')}">
</p:submenu>
</p:menubar>
</h:form>
<br/>
<h:form prependId="false">
<p:commandButton style="width: 110px" value="Novo" actionListener="#{usuarioController.prepararAdicionarUsuario}" image="ui-icon-document" update=":adicionar:infoUsuario" oncomplete="dialogUsuarios.show()"/>
</h:form>
<p:dialog header="Cadastro de Usuários" widgetVar="dialogUsuarios" resizable="false" modal="true" showEffect="slide" width="500">
<h:form prependId="false" id="adicionar" >
<h:panelGrid id="infoUsuario" columns="2" style="margin-bottom:10px">
<h:outputLabel for="login" value="Usuário:" />
<h:inputText id="login" value="#{usuarioController.usuario.login}" size="20"/>
<h:outputLabel for="senha" value="Senha: " />
<h:inputSecret id="senha" value="#{usuarioController.usuario.senha}" size="20" />
<h:outputLabel for="ativo" value="Ativo:" />
<h:selectOneMenu id="ativo" value="#{usuarioController.usuario.ativo}">
<f:selectItem itemLabel="Não" itemValue="0"/>
<f:selectItem itemLabel="Sim" itemValue="1"/>
</h:selectOneMenu>
<p:commandButton update=":dadosTabela:tabela" oncomplete="dialogUsuarios.hide();" actionListener="#{usuarioController.adicionarUsuario}" value="Gravar" />
</h:panelGrid>
</h:form>
</p:dialog>
<br/>
<h:form prependId="false" id="dadosTabela">
<p:dataTable id="tabela" var="usuario" value="#{usuarioController.listarUsuarios}" emptyMessage="Sem Registros...">
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value="Login"/>
</f:facet>
<h:outputText value="#{usuario.login}"/>
</p:column>
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value=""/>
</f:facet>
<p:commandButton actionListener="#{usuarioController.prepararAlterarUsuario}" value="Alterar" image="ui-icon-tag" update=":dadosTabela:tabela" oncomplete="dialogUsuarios.show()" />
</p:column>
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value=""/>
</f:facet>
<p:commandButton actionListener="#{usuarioController.excluirUsuarios}" value="Excluir" image="ui-icon-trash" update=":dadosTabela:tabela"/>
</p:column>
</p:dataTable>
</h:form>
</p:panel>
</h:body>
</html>