Erro ao salvar no banco [ERRO: DBNo operations allowed after connection closed.]

ERRO: DBNo operations allowed after connection closed.


import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;

public class Cliente implements Serializable {
	
	private static final long serialVersionUID = 1L;

	private String cpf;
	private String nome;
	private Date dataNascimento;
	private ArrayList<Integer> telefone = new ArrayList<>();
	
	public Cliente() {
		
	}
	
	@Override
	public String toString() {
		return "Cliente [cpf=" + cpf + ", nome=" + nome + ", dataNascimento=" + dataNascimento + "]";
	}

	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Date getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Date data) {
		this.dataNascimento = data;
	}
	public ArrayList<Integer> getTelefone() {
		return telefone;
	}
	public void setTelefone(ArrayList<Integer> telefone) {
		this.telefone = telefone;
	}	
}
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import br.com.edu.ifpb.model.Cliente;

public class ClienteDAO implements Serializable{
	
	private static final long serialVersionUID = 1L;

	public void createCliente(Cliente c) {
			
		try(Connection con = ConnectionFactory.getConnection()){
					
			PreparedStatement ps = con.prepareStatement("INSERT INTO CLIENTE(cpf,nome, dataNascimento)" + "value(?,?,?)");

			ps.setString(1, c.getCpf());
			ps.setString(2, c.getNome());
			
			c.getDataNascimento();
			
			ps.setDate(3, new java.sql.Date(c.getDataNascimento().getTime()));

			ps.execute();
			ps.close();
			System.out.println("Salvo");

		} catch (SQLException e) {
			System.out.println("Erro ao grava na DB" + e.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	

	public List<Cliente> getAllClientes() {

		List<Cliente> clientes = null;

		try (Connection con = ConnectionFactory.getConnection()) {

			PreparedStatement ps = con.prepareStatement("SELECT * FROM CLIENTE");

			ResultSet rs = ps.executeQuery();

			clientes = new ArrayList<>();

			while (rs.next()) {

				Cliente c = new Cliente();
				c.setCpf(rs.getString("cpf"));
				c.setNome(rs.getString("nome"));
				c.setDataNascimento(rs.getDate("dataNascimento"));

				clientes.add(c);

			}

			ps.execute();
			ps.close();
			rs.close();
		
			System.out.println("Recuperando dados");

		} catch (SQLException e) {
			System.out.println("Erro aqui" + e.getMessage());
		}

		return clientes;
	}
	
}
@Named
@SessionScoped
public class BeanCliente implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Inject
	private Cliente cliente;
	
	private ClienteDAO c = new ClienteDAO();
	
	private List<Cliente> clientes = c.getAllClientes();
	
	
	public Cliente add() {
				
		c.createCliente(cliente);
		
		limpar();
		
		return null;
	}
	
	private void limpar() {
		cliente = new Cliente();
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public ClienteDAO getC() {
		return c;
	}

	public void setC(ClienteDAO c) {
		this.c = c;
	}
	
}
<b:form>
					<b:row>
		
						<b:column medium-screen="full">
							<b:inputText style="width: 250px;" label="CPF:" label-style-class="text" value="#{beanCliente.cliente.cpf}"/>
						</b:column>
						
						<b:column medium-screen="full">
							<b:inputText style="width: 250px;" label="Nome:" label-style-class="text" value="#{beanCliente.cliente.nome}"/>
						</b:column>
							      
						<b:column medium-screen="full">
							
							<b:datepicker style="width:250px;" label="Data de nascimento" inline="true"  label-style-class="text" value="#{beanCliente.cliente.dataNascimento}" format="DD/MM/YYYY">
								<f:convertDateTime pattern="dd/MM/yyyy"/>
							</b:datepicker>
						
						</b:column>
						
						<b:commandButton value="Adicionar" look="info" styleClass="bt-cadastrar" actionListener="#{beanCliente.add}" />						
						      
					</b:row>
				
				</b:form>

Só dá close na Connection. No seu caso, só remover estes 2 closes ai.

Continua com o mesmo erro.

eu não manjo muito de java,mas provavelmente tu está fechando a conexão antes de salvar o registro no banco.

Fecha o ResultSet antes de fechar o PreparedStatement

O problema e no método getAllClientes, está salvando porém não atualiza o arraylist

E em algum lugar depois de salvar, você pede para atualizar?

Eu atualizo a pagina e faz a requisição novamente porém eu testo o getCliente fora no main fora do JSF retorna tudo normal dentro de um foreach

Pelo o que eu estou vendo aqui, a única vez que voce popula a sua lista é quando o Bean é criado, e como ele é de sessão, só vai ser chamado o método uma vez, logo não atualizará os dados enquanto estiver na mesma sessão

Tentei chamar o getAllClientes dentro do html porém fica dando erro não popula a table

Cara, posta o stacktrace desse erro.