Quando vou editar duplica os dados no DataTable [RESOLVIDO]

2 respostas
G

Bom dia, queria tirar uma duvida. Quando eu clico no editar ele puxa os dados para o formulário de funcionários então eu faço a alteração só que quando eu salvo, ele duplica somente no dataTable no banco está normal então quando eu do restart no tomcat 7.0 o dataTable tira as duplicações, e o método de remover também não esta dando certo. Estou utilizando o eclipse luna, Tomcat v7.0, jsf

controller
package controller;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import to.Funcionario;
import bo.IFuncionarioBO;
import bo.impl.FuncionarioBOImpl;

@SessionScoped
@ManagedBean
public class FuncionariosController {

	private IFuncionarioBO funcionarioBO = new FuncionarioBOImpl();
	private List<Funcionario> funcionarios;
	private Funcionario funcionario;
	private Funcionario funcionarioSelecionado;
	private String nomeLocalizar;
	
	{
		funcionarios = new LinkedList<Funcionario>();
		funcionarios.addAll(funcionarioBO.listar());
		
	}

	public IFuncionarioBO getFuncionarioBO() {
		return funcionarioBO;
	}

	public void setFuncionarioBO(IFuncionarioBO funcionarioBO) {
		this.funcionarioBO = funcionarioBO;
	}

	public List<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public Funcionario getFuncionario() {
		if(funcionario == null){
			funcionario = new Funcionario();
		}
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Funcionario getFuncionarioSelecionado() {
		return funcionarioSelecionado;
	}

	public void setFuncionarioSelecionado(Funcionario funcionarioSelecionado) {
		this.funcionarioSelecionado = funcionarioSelecionado;
	}

	public String getNomeLocalizar() {
		return nomeLocalizar;
	}

	public void setNomeLocalizar(String nomeLocalizar) {
		this.nomeLocalizar = nomeLocalizar;
	}

	public void salvar() {
		funcionarioBO.salvar(funcionario);
		funcionarios.add(funcionario);
		FacesMessage msg = new FacesMessage("Funcionário " + funcionario.getNome()
				+ " salvo com sucesso!!!");
		FacesContext.getCurrentInstance().addMessage(null, msg);
		funcionario = null;
		
	}

	public void novo() {
		System.out.println("....");
		funcionarioBO.salvar(funcionario);
		FacesContext context = FacesContext.getCurrentInstance();           
        context.addMessage(null, new FacesMessage("User successfully added."));
        funcionarioSelecionado = null;
		funcionario = null;
		nomeLocalizar = null;
			
	}

	public void localizar() {
		System.out.println("localizar");
		List<Funcionario> funcionarios = new ArrayList<Funcionario>();
		funcionarios = funcionarioBO.buscarUsuarioPorNome(nomeLocalizar);
		nomeLocalizar = null;
		funcionario = null;
		System.out.println(funcionarios);
	}
	
	
	public void remover(Funcionario funcionario) { 
		System.out.println("excluido");
		   funcionarioBO.remover(funcionario);
		   FacesMessage msg = new FacesMessage("Funcionario "+funcionario.getNome()+" removido com sucesso!!!");
		   FacesContext.getCurrentInstance().addMessage(null, msg); 
		   funcionario = null;
		} 

		public void editar(Funcionario funcionario){   
			
			this.funcionario = funcionario;
			
		    
		}
}
xhtml
<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<h:head>
<title>System Manager</title>
 <script type="text/javascript">
 	$(document).ready(function(){
 		$(".fone").mask("([telefone removido]");
 		$(".cpf").mask("[CPF removido]");
 		
 	});
 
 </script>
</h:head>

<h:body>

		<p:layout style="min-width:400px;min-height:200px;">
    <p:layoutUnit position="west" resizable="true" size="250" minSize="100" maxSize="150">
        
        <h:form>
    <p:growl id="cadastro" life="2000" />
     
    <p:commandButton value="Cadastro Funcionario" id="cadastros" update="cadastro" actionListener="#{buttonView.buttonAction}" 
    styleClass="ui-priority-primary" />
    
    
     </h:form>
     <h:form>
    <p:growl id="produto" life="2000" />
     
    <p:commandButton value="Cadastro de Produto" id="produtos" update="produto" actionListener="#{buttonView.buttonAction}" 
    styleClass="ui-priority-primary" />
    
    </h:form>
    
    <h:form>
    <p:growl id="estoque" life="2000" />
     
    <p:commandButton value="Estoque de Produto" id="estoques" update="estoque" actionListener="#{buttonView.buttonAction}" 
    styleClass="ui-priority-primary" />
    
    
     </h:form>
    </p:layoutUnit>
 
    <p:layoutUnit position="center">
       
       <h:form id="form">
		<h:inputHidden id="id"
			value="#{funcionariosController.funcionario.id}" />
		<p:panel id="panel" header="Cadastro de Funcionario"
			style="margin-bottom:10px;">
			<p:messages id="messages" />
			<h:panelGrid columns="3">
				
				
				<h:outputLabel for="nome" value="NOME: *" />
				<p:inputText id="nome"
					value="#{funcionariosController.funcionario.nome}" required="false"
					label="nome" size="60">
					<f:validateLength maximum="100" />

				</p:inputText>
				<p:message for="nome" />
				
				<h:outputLabel value="TELEFONE: *" for="telefone" />  
            <p:inputText id="telefone" Label="telefone" styleClass='fone' value="#{funcionariosController.funcionario.telefone}"  
                required="false" maxlength="10" size="60" >
                <f:validateLength maximum="100" />              
            </p:inputText> 
            <p:message for="telefone" />

				
				<h:outputLabel for="endereco" value="ENDEREÇO:*" />
				<p:inputText id="endereco"
					value="#{funcionariosController.funcionario.endereco}"
					required="false" label="endereco" size="60">
					<f:validateLength maximum="45" />
				</p:inputText>
				<p:message for="endereco" />

				<h:outputLabel for="email" value="E-MAIL: " />
				<p:inputText id="email"
					value="#{funcionariosController.funcionario.email}" required="false"
					label="email" size="60">
					<f:validateLength maximum="45" />
				</p:inputText>
				<p:message for="email" />

				<h:outputLabel for="cpf" value="CPF: *" />
				<p:inputText id="cpf" styleClass='cpf'
					value="#{funcionariosController.funcionario.cpf}" required="false"
					label="cpf" size="60">
					<f:validateLength maximum="45" />
				</p:inputText>
				<p:message for="cpf" />

				<h:outputLabel for="login" value="LOGIN: *" />
				<p:inputText id="login"
					value="#{funcionariosController.funcionario.login}" required="false"
					label="login">
					<f:validateLength maximum="45" />
				</p:inputText>
				<p:message for="login" />

				<h:outputLabel for="senha" value="Senha: *" />
				<p:password id="senha"
					value="#{funcionariosController.funcionario.senha}" required="false"
					label="senha" redisplay="true"> 
					<f:validateLength maximum="45" />
					
				</p:password>
				<p:message for="senha" />


			</h:panelGrid>
		</p:panel>
		
<!-- botões que dão ação para o xhtml -->	
		<p:commandButton value="Salvar" update="@all"
			action="#{funcionariosController.salvar}"
			icon="ui-icon-disk" />
		<p:commandButton value="Excluir" update="@all"
			action="#{funcionariosController.remover}"
			 icon="ui-icon-close" />
		<p:commandButton value="Localizar"
			action="#{funcionariosController.localizar}"
			icon="ui-icon-search"/>


<!-- dataTable onde fica a lista de funcionarios -->
		<div align="center">	
		<p:dataTable value="#{funcionariosController.funcionarios}" var="funcionario"
					border="10" cellpadding="20" cellspacing="0" paginator="true"
					paginatorPosition="bottom" rows="10" id="funcionariosTable"
					style="margin-top: 20px">
					
				
		<p:column headerText="NOME" style="width: 120px">
				<h:outputText value="#{funcionario.nome}"  />
			</p:column>
			<p:column headerText="TELEFONE" styleClass='fone' style="width: 130px" >
				<h:outputText value="#{funcionario.telefone}" />
			</p:column>

			<p:column headerText="ENDEREÇO" style="width: 180px">
				<h:outputText value="#{funcionario.endereco}" />
			</p:column>

			<p:column headerText="E-MAIL" style="width: 250px" >
				
				<h:outputText value="#{funcionario.email}" />
			</p:column>

			<p:column headerText="CPF" style="width: 120px"  >
				<h:outputText value="#{funcionario.cpf}" styleClass='cpf'/>
			</p:column>

			<p:column headerText="LOGIN" style="width: 90px" >
				<h:outputText value="#{funcionario.login}"  />
			</p:column>
			
			<p:column headerText="" style="width: 90px" >
			<p:growl id="atualiza" life="2000" />
				<p:commandButton action="#{funcionariosController.editar(funcionario)}" update="@form"
				id="iconOnly" icon="ui-icon-wrench" title="Editar" />
				
				<p:commandButton actionListener="#{funcionario.remover}" id="icon" update="atualiza" 
				icon="ui-icon-trash" title="Excluir" />
			</p:column>


		</p:dataTable>
		</div>
	</h:form>
    </p:layoutUnit>
    
</p:layout>

	

</h:body>

</html>

Desde já obrigado, atenciosamente.

2 Respostas

Rafael_Guerreiro

Quando você salva um usuário, você está adicionando-o na sua lista:

G

Rafael obrigado,

tive que mexer no metodo salvar ficou assim

public void salvar(){

funcionarioBO.salvar(funcionario);
funcionarios.clear();
funcionarios.addAll(funcionarioBO.listar());

FacesMessage msg = new FacesMessage("Funcionario " + funcionario.getNome()
      + " salvo com sucesso!!");

FacesContext.getCurrentInstance().addMessage(null, msg);
funcionario = null;

}

deu certo sem duplicação e quando faço o editar ele já retorna no dataTable

Muito Obrigado !!

Criado 9 de junho de 2015
Ultima resposta 9 de jun. de 2015
Respostas 2
Participantes 2