Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Arraylist com JSF - Java

Projeto JSF com Arraylist

Fala Devs, tenho que criar um Dynimic Web Project contendo um arraylist no contexto de clientes com nome, endereço e telefone (5 clientes). E de alguma forma no .xhtml tenho que passar esses clientes em forma de tabela no navegador e ao lado de cada cliente tem que ter um botão "X" para remover o cliente da tabela.

Só que o problema é que não sei por onde começa, acredito que vou precisar das bibliotecas Prime-faces e JavaFaces-Server dentro da pasta webapp>web-inf>lib, correto? Irei precisar de mais alguma biblioteca?

E a classe ManagedBean vai conter esse arraylist e as variáveis, certo?

1 resposta
solução!

Depois de muita pesquisa, acabei que consegui resolver kkkk

Basicamente era criar uma classe ManagedBean (ClienteBean) para adicionar os clientes no array e também listar, e remover:

package com.beans.modelo;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="clienteBean")
@SessionScoped

public class ClienteBean {
    private List<Cliente> clientes;

    public ClienteBean() {
        clientes = new ArrayList<>();
        clientes.add(new Cliente("Michael", "Rua José Luiz, 123", "(15) 1234-5678"));
        clientes.add(new Cliente("Claudio", "Rua da Alameda, 456", "(21) 9876-5432"));
        clientes.add(new Cliente("Felipe", "Av. São Paulo, 789", "(31) 3214-5678"));
        clientes.add(new Cliente("Robert", "Av. Ipanema, 1011", "(41) 5432-1234"));
        clientes.add(new Cliente("Carlos", "Av. Itavuvu, 1313", "(51) 7654-3214"));
    }

    public void removerCliente(Cliente cadaCliente) {
        clientes.remove(cadaCliente);
    }

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

Também precisei criar uma classe Cliente:

package com.beans.modelo;

public class Cliente {

    private String nome;
    private String endereco;
    private String telefone;

    public Cliente(String nome, String endereco, String telefone) {
        this.nome = nome;
        this.endereco = endereco;
        this.telefone = telefone;
    }
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
}

E por último, no .xhtml fazer as referencias para o ManagedBean:

<!DOCTYPE html>
<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">

<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Clientes</title>
</h:head>
<h:body>
    <h:form id="formId">
        <p:panel id="panelId">
            <h:dataTable value="#{clienteBean.clientes}" var="cliente">
                <h:column>
                    #{cliente.nome}
                </h:column>
                <h:column>
                    #{cliente.endereco}
                    </h:column>
                <h:column>
                    #{cliente.telefone}
                </h:column>
                <h:column>
                    <p:commandButton value="X" action="#{clienteBean.removerCliente(cliente)}" update=":formId:panelId" />
                </h:column>
            </h:dataTable>
        </p:panel>
    </h:form>
</h:body>
</html>

Ocorreu um erro de atualizar a tabela. No .xhtml eu estava usando update="dataTable" e por algum motivo que eu não sei, estava lançando uma exception dizendo que não era possível localizar o componente "dataTable". Então ao invés de atualizar o dataTable diretamente, eu estou atualizando o panelId