Como excluir objetos dentro de uma lista dataTable do JSF -Prime Faces?

10 respostas
javamysqlprimefaces
R

Pessoas,É o seguinte estou tentando excluir aqueles dados selecionados… nesta tela de listar,só que quando clico na ação de excluir ele não exclui…

<p:commandLink >
	<left>
		<h:graphicImage library="imagens" name="editar.png" width="30" height="30"/>
	</left>
</p:commandLink>       


<p:commandLink
	process="tabela" action="#{controlerBean.excluir(funcionarioSelecionados)}"  >                         
	<left>
		<h:graphicImage library="imagens" name="lixo.png" width="30" height="30"/>
	</left>                 
</p:commandLink>


<p:dataTable id="tabela" var="funcionario" value="#{controlerBean.funcionarios}" selection="#{controlerBean.funcionarioSelecionados}" rowKey="#{funcionario.cpf}" style="margin-bottom:0">

	<f:facet name="header">

	</f:facet>

	<p:ajax event="rowSelect" />

	<p:column selectionMode="multiple" style="width:16px;text-align:center" />

	<p:column  filterBy="#{funcionario.cpf}" headerText="CPF" footerText="Usúarios "            filterMatchMode="contains">
		<h:outputText value="#{funcionario.cpf}" />
	</p:column>

	<p:column headerText="Nome">
		<h:outputText value="#{funcionario.nome}" />
	</p:column>

	<p:column headerText="Matricula">
		<h:outputText value="#{funcionario.matricula}"/>
	</p:column>

	<p:column headerText="Diretoria">
		<h:outputText value="#{funcionario.diretoria}"/>
	</p:column>

	<p:column  headerText="Gerencia">
		<h:outputText value="#{funcionario.departamento}"/>
	</p:column>

	<p:column  headerText="Divisao">
		<h:outputText value="#{funcionario.divisao}"/>
	</p:column>

	<p:column  headerText="Cargo">
		<h:outputText value="#{funcionario.cargo}"/>
	</p:column>                              

</p:dataTable>        
<br/><br/><br/>


</h:form>

</ui:define>

</ui:composition>

Segue meu bean

import br.com.grande_recife.DAO.Conexao;
import br.com.grande_recife.DAO.DeletarCadastro;
import br.com.grande_recife.util.Funcionario;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import java.sql.ResultSet;
import java.util.Iterator;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author rimendes
 */
@ManagedBean
public class ControlerBean implements Serializable {

    private List<Funcionario> funcionarios = this.listarDados();

    private List<Funcionario> funcionarioSelecionados;
    // private PreparedStatement stmte;

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

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

    public List<Funcionario> getFuncionarioSelecionados() {
        return funcionarioSelecionados;
    }

    public void setFuncionarioSelecionados(List<Funcionario> funcionarioSelecionados) {
        this.funcionarioSelecionados = funcionarioSelecionados;
    }

    public List<Funcionario> listarDados() {

        //gerencia
        String sqq = "select funcionario.cpf , nome, matricula,diretoria,departamento,divisao, cargo "
                + "from funcionario "
                + "left JOIN dadosprofissionais "
                + "ON dadosprofissionais.cpf = funcionario.cpf";

        List<Funcionario> lista = new ArrayList<Funcionario>();

        try {
            Statement tt = Conexao.getConexao().createStatement();
            //PreparedStatement tt = Conexao.getConexao().prepareStatement(sqq);
            //tt.setString(1, sqq);
            ResultSet resul = tt.executeQuery(sqq);

            while (resul.next()) {

                Funcionario funcionario = new Funcionario();
                funcionario.setCpf(resul.getString("cpf"));
                funcionario.setNome(resul.getString("nome"));
                funcionario.setMatricula(resul.getInt("matricula"));
                funcionario.setDiretoria(resul.getString("diretoria"));
                funcionario.setDepartamento(resul.getString("departamento"));
                funcionario.setDivisao(resul.getString("divisao"));
                funcionario.setCargo(resul.getString("cargo"));

                lista.add(funcionario);

            }

        } catch (SQLException ex) {

            Logger.getLogger(ControlerBean.class.getName()).log(Level.SEVERE, null, ex);
            //Logger.getAnonymousLogger(ListarBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lista;
    }

    public void excluir(String nome) {

        DeletarCadastro excluir = new DeletarCadastro();
        //excluir.deletarFuncionario(funcionario);

        for (Funcionario func : funcionarioSelecionados) {
            //funcionarioSelecionados.get(i).getCpf();
           // funcionarioSelecionados.get(i).getMatricula();
           // funcionarioSelecionados.get(i).getDiretoria();
            //funcionarioSelecionados.get(i).getDepartamento();
            //funcionarioSelecionados.get(i).getDivisao();
            // funcionarioSelecionados.get(i).getCargo();
            funcionarioSelecionados.remove(func);
           excluir.deletarFuncionario((Funcionario) funcionarioSelecionados);
          
              
        }

    }

}

10 Respostas

R

estou usando esse aqui ó do prime faces…selection - Checkbox selecionar aqueles e excluir…
Dá uma sacada aew pra entenderem o que estou falando melhor…

http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml

L

basta você acrescentar dentro for do método public void excluir(String nome) um

funcionarios.remove(func)

Agora, eu recomendaria você dar uma refatorada no seu código. Você tem acesso ao bando de dados no seu bean. Esse método você passa o parâmetro String nome que sequer é usado. Seria bom dar uma corrigida nele antes de seguir

R

assim ??

public void excluir(String nome) {

    DeletarCadastro excluir = new DeletarCadastro();
    //excluir.deletarFuncionario(funcionario);
   
    
    
    for (Funcionario func: funcionarioSelecionados) {
        
        funcionarioSelecionados.remove(func);
       //excluir.deletarFuncionario((Funcionario) funcionarioSelecionados);
      
          
    }

`

L

Não… olha a situação que você está, podem sair dois resultados: você clica em excluir e o elemento não desaparece, sem dar erro, sem nada. No entanto, se você procurar no banco de dados, ele não está mais lá, ou seja, ele foi apagado no bd, mas não foi retirado na lista que está em tela. Para isso você acrescenta a linha que passei, sem retirar as demais. Se por acaso estiver aparecendo algum erro no console, demorou… coloca o erro aqui que damos uma olhada no que está acontecendo

R

Logusmao…fiz do jeito que vc falou e nem some do banco,a questão de atualizar a página a pessoa coloca um update na página mesmo xhtml ,que ela atualiza,a questão é que não está deletando na persistência…

L

ah… entendi errado seu problema… tem como você colocar o código desse método???

deletarFuncionario((Funcionario) funcionarioSelecionados);

R

Tem sim Logusmao… Saka

`public class DeletarCadastro {

public Boolean deletarFuncionario(Funcionario deletar) {
    String sql = "DELETE FROM funcionario WHERE cpf = ?";
    Boolean retorno = false;
    try {
        PreparedStatement stmt = Conexao.getConexao().prepareStatement(sql);
        stmt.setString(1, deletar.getCpf());
        stmt.executeUpdate();
        stmt.close();
    } catch (SQLException ex) {
        Logger.getLogger(DeletarCadastro.class.getName()).log(Level.SEVERE, null, ex);
    }

    return retorno;
}


}

Da classe DeletarCadastro,minha fk no banco é cpf
`

L

Quando vc roda esse sql direto no console do banco de dados, o objeto é deletado corretamente? Pq olhando o código, não vejo nenhum erro na persistência…

R

Sim…pq está tela do listar ela ,não possui todos os parâmetros do banco não ,é apenas algumas informações,e o cpf seria a fk pra pegar estes campos…

olha a minha tela de listar …quero excluir e não exclui…

L

Dentro do for, coloque

excluir.deletarFuncionario(func);

Criado 14 de julho de 2016
Ultima resposta 23 de jul. de 2016
Respostas 10
Participantes 2