Olá Wellington Antonio,
O que está ocorrendo na verdade é um comportamento próprio da Expression Language, como você comentou, e não é específico do JSF. Segundo a especificação da Expression Language, os atributos de um Bean são sempre acessados através de métodos acessores (Getters & Setters) e nunca diretamente. Basicamente, quando um atributo pode ser lido, o mesmo possuirá um "get" e, quando pode ser escrito, um "set".
No exemplo da questão, quando você utiliza o comando #{livroBean.autores}
, por trás dos panos, a EL está acessando o atributo autores
através do método getAutores()
que, por sua vez, retorna uma Collection
(ex.: List) que pode ser iterada no componente selectItems
do JSF.
É importante salientar que não é necessário existir um atributo no Bean para existir um método acessor, por exemplo:
public class SomaBean {
Integer a = 1;
Integer b = 2;
public Integer getTotal() {
return a + b;
}
}
Na EL:
<h:outputText value="#{somaBean.a}" /> // Erro
<h:outputText value="#{somaBean.total}" /> // Funciona
=)