Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro no Jsf Property 'id' not found on type java.lang.String

Criei uma controller baseada em outra que tenho e esta funcional. E quando tento listar os dados na minha view esta exibindo esse erro, alguém sabe me dizer o que é? minha controller:

@Named
@SessionScoped
public class FechamentoController implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<Fechamento> fechamentos;
    private Fechamento fechamento;

    @PostConstruct
    private void init() throws Exception {
        fechamentos = new ArrayList<Fechamento>();
        fechamentos = listar();
    }

    // ACTIONS
    public List<Fechamento> listar() throws SQLException {
        Connection conn = new ConnectionFactory().getConnection();
        IFechamento<Fechamento> dao = new FechamentoDao(conn);
        try {
            fechamentos = dao.list();
            System.out.println(fechamentos);
            System.out.println("Listando....");
        } catch (Exception e) {

            e.printStackTrace();
        }
        conn.close();
        return fechamentos;
    }

    // getters and setters
    public List<Fechamento> getFechamentos() {
        return fechamentos;
    }

    public void setFechamentos(List<Fechamento> fechamentos) {
        this.fechamentos = fechamentos;
    }

    public Fechamento getFechamento() {
        return fechamento;
    }

    public void setFechamento(Fechamento fechamento) {
        this.fechamento = fechamento;
    }

}

minha view :

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>
    <h:form>
        <table>
            <tr>
                <td>Id</td>
                <td>Dia</td>
                <td>Mes</td>
                <td>Ano</td>
                <td>Hora</td>
                <td>Minuto</td>
                <td>Timestamp</td>
            </tr>

            <ui:repeat var="item" value=" {fechamentoController.fechamentos}">
                <tr>
                    <td>#{item.id}</td>
                    <td>#{item.dia}</td>
                    <td>#{item.mes}</td>
                    <td>#{item.ano}</td>
                    <td>#{item.hora}</td>
                    <td>#{item.minuto}</td>
                    <td>#{item.timestamp}</td>
                    <td><h:commandButton
                            action="#{fechamentoController.editar(item)}" value="Editar" /></td>
                    <td><h:commandButton
                            action="#{fechamentoController.excluir(item)}" value="Excluir" /></td>
                </tr>

            </ui:repeat>
            <h:commandButton action="#{fechamentoController.adicionar()}"
                value="adicionar" />

        </table>
    </h:form>
</body>
</html>

e a dao:


public class FechamentoDao implements IFechamento<Fechamento> {    

    private final String SQL_SELECT_ALL = "select *from fechamentos";

    public Connection conn;

    public FechamentoDao(Connection conn) {
        this.conn = conn;

    }



    @Override
    public List<Fechamento> list() throws Exception {
        PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT_ALL);
        ResultSet rs = preparedStatement.executeQuery();

        List<Fechamento> fechamentoList = new ArrayList<>();

        while (rs.next()) {
            Fechamento fechamento = new Fechamento();

            fechamento.setId(rs.getInt("id"));
            fechamento.setDia(rs.getInt("dia"));
            fechamento.setMes(rs.getInt("mes"));
            fechamento.setAno(rs.getInt("ano"));
            fechamento.setHora(rs.getInt("hora"));
            fechamento.setMinuto(rs.getInt("minuto"));
            fechamento.setTimestamp(rs.getInt("timestamp"));
            fechamentoList.add(fechamento);
        }
        rs.close();
        preparedStatement.close();

        return fechamentoList;
    }

}

model:

public class Fechamento {

    private int id;
    private int dia;
    private int mes;
    private int ano;
    private int hora;
    private int minuto;
    private int timestamp;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getDia() {
        return dia;
    }

    public void setDia(int dia) {
        this.dia = dia;
    }

    public int getMes() {
        return mes;
    }

    public void setMes(int mes) {
        this.mes = mes;
    }

    public int getAno() {
        return ano;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }

    public int getHora() {
        return hora;
    }

    public void setHora(int hora) {
        this.hora = hora;
    }

    public int getMinuto() {
        return minuto;
    }

    public void setMinuto(int minuto) {
        this.minuto = minuto;
    }

    public int getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(int timestamp) {
        this.timestamp = timestamp;
    }

    @Override
    public String toString() {
        return "Fechamento [id=" + id + ", dia=" + dia + ", mes=" + mes + ", ano=" + ano + ", hora=" + hora
                + ", minuto=" + minuto + ", timestamp=" + timestamp + "]";
    }

}
3 respostas
solução!

Falta o # no value

<ui:repeat var="item" value=" {fechamentoController.fechamentos}">

Valew Carlos, uma bobeira que sempre da uma dor de cabeça rsrs :)

Pois é.

rsrsrsrs

Sempre é algo simples que deixamos passar.

Abraços e bons estudos!