Ola Joviane tudo bem ? Fiquei feliz em ver sua resposta eu tive aula com você na Caelum a uns 3 anos atrás, de Java Web da formação Java.
Fiz conforme a sua orientação movendo para dentro do Init, e no meu DAO eu fiz a injeção pelo CDI e deu tudo certo ... Obrigado.
Segue a implementação para ajuda dos nossos amigos...
@Named
@ViewScoped
public class LivroBean implements Serializable {
//Codigo omitido
@Inject
private LivroDataModel livroDataModel;
public LivroDataModel getLivroDataModel() {
return livroDataModel;
}
public void setLivroDataModel(LivroDataModel livroDataModel) {
this.livroDataModel = livroDataModel;
}
//Codigo Omitido
@Named
@ViewScoped
public class LivroDataModel extends LazyDataModel<Livro> {
private static final long serialVersionUID = 864366873420025201L;
@Inject
EntityManager em;
private DAO<Livro> dao;
@PostConstruct
void init(){
this.dao = new DAO<Livro>(this.em, Livro.class);
super.setRowCount(dao.quantidadeDeElementos());
}
@Override
public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao,
Map<String, Object> filtros) {
// TODO Auto-generated method stub
String titulo = (String) filtros.get("titulo");
return dao.listaTodosPaginada(inicio, quantidade, "titulo", titulo);
}
}
//Codigo Omitido
<p:dataTable value="#{livroBean.livroDataModel}" id="tabelaLivros" lazy="true" var="livro" paginator="true" rows="5">
<f:facet name="header">Livros</f:facet>
<p:column sortBy="#{livro.titulo}" filterBy="#{livro.titulo}"
filterMatchMode="startsWith">
<f:facet name="header">Titulo</f:facet>
<h:outputText value="#{livro.titulo}"></h:outputText>
</p:column>
<p:column sortBy="#{livro.isbn}" filterBy="#{livro.isbn}"
filterMatchMode="contains">
<f:facet name="header">ISBN</f:facet>
<h:outputText value="#{livro.isbn}"></h:outputText>
</p:column>
<p:column sortBy="#{livro.preco}" filterBy="#{livro.preco}"
filterFunction="#{livroBean.precoEhMenor}">
<f:facet name="header">Preço</f:facet>
<h:outputText value="#{livro.preco}">
<f:convertNumber type="currency" pattern="R$ #0.00"
currencySymbol="R$" locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Data</f:facet>
<h:outputText value="#{livro.dataLancamento.time}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"
timeZone="America/Sao_Paulo" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">Remover</f:facet>
<p:commandLink value="remover" action="#{livroBean.remover(livro)}"
process="@form" update="@form :formDadosDoLivro" />
</p:column>
<p:column>
<f:facet name="header">Alterar:</f:facet>
<p:commandLink value="alterar"
action="#{livroBean.carregar(livro)}" process="@form"
update="@form :formDadosDoLivro"></p:commandLink>
</p:column>
</p:dataTable>
//Codigo Omitido