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

SelectItems

Não entendi o fato do SelectItems ter o seu valor na expression language setado como

<f:selectItems value="#{livroBean.autores}" />

ao invés de

<f:selectItems value="#{livroBean.getAutores}" />

que é o método que retorna essa lista.

5 respostas

Felipe oque que você não entendeu? Oque eu estou vendo ai são 2 metodos iguais, só que não precisa chamar o get no metodo na sua pagina xhtml. o html ja reconhece automaticamente que esse metodo de cima

<f:selectItems value="#{livroBean.autores}" />

é a referencia do metodo la no livroBean que retorna a lista de autores! Então não tem necessidade de usar o getAutores

Oi Felipe,

Na EL, o Java usa a notacao de propriedade pra acessar getters. É algo bem antigo, anterior ao JSF até (os JSPs ja tinham isso). A ideia é que a view deve ser mais simples de ler e que acessar livroBean.autores é mais simples que livroBean.getAutores().

Na pratica ele so transforma a chamada no getter mesmo

Desculpem, deveria ter explicado melhor. O que quis me referir, é que a classe LivroBean não possui nenhum atributo Autor ou lista de Autores. Somente possui uma instância de Livro, que aí sim possui essa lista.

Eu não estou conseguindo enxergar ao que esse livroBean.autores está fazendo referência. Está acessando a instância da classe Livro de LivroBean para utilizar as lista de Autores?

Minha classe LivroBean se encontra da seguinte forma:

@ManagedBean
public class LivroBean {

    private Livro livro = new Livro();

    public Livro getLivro() {
        return livro;
    }

    public void gravar() {
        System.out.println("Gravando livro " + this.livro.getTitulo());

        if (livro.getAutores().isEmpty()) {
            throw new RuntimeException("Livro deve ter pelo menos um Autor.");
        }

        new DAO<Livro>(Livro.class).adiciona(this.livro);
    }

    public List<Autor> getAutores() {
        return new DAO<Autor>(Autor.class).listaTodos();
    }

}

O código #{livroBean.autores} está identificando o método getAutores? Ele desconsidera a palavra GET na frente?

solução!

Isso Felipe que nem te disse o xhtml não precisa por o getAutores e sim autores que sera a referencia do seu metodo lista.

 public List<Autor> getAutores() {
        return new DAO<Autor>(Autor.class).listaTodos();
    }