Ola!
Eu fiz quase todos os casos de uso utilizando Session Beans. No entanto, duas funcionalidades eu fiz utilizando o EntityHome e o EntityList (eram coisas simples, no estilo CRUD ).
Só que eu adicionei um botão de busca que permita que a listagem dos resultados seja um pouco mais seletiva.
O método que faz a busca está funcionando. Só que eu não sei como exibir os resultados na página de listagem.
Nesta página, o valor da tabela que irá exibir os resultados faz referência a um variável implícita (no caso da noticia é NoticiaList.resultList) com a qual eu não sei trabalhar.
Quando eu entro na página de listar noticias, o construtor da classe NoticiaList é executado e a variavel resultList é populada.
Se eu faço uma busca mais seletiva (através do botão buscar), gostaria que os resultados fossem exibidos na mesma página que exibe a listagem completa (página listarNoticias.xhtml).
A dúvida é que eu não sei como popular a variável resultList da classe NoticiaList. Atualmente o hibernate retorna o resultado correto (eu testei utilizando log) mas o que é exibido é a listagem de todas as noticías cadastradas no banco (a listagem que é exibida quando eu entro na página de listagem pela primeira vez)
Este é o método que fica na classe Home e é responsável por realizar a busca pelas notícias conforme o gosto do usuário
[code]public String buscarNoticia(BuscarNoticiaForm form) {
SimpleDateFormat format = new SimpleDateFormat(“yyyy/MM/dd”);
String sql = "select n from Noticia n where 1 = 1 and ";
if (form.getTitulo().trim().length() > 0) {
String titulo = form.getTitulo();
sql += "n.titulo = '" + titulo + "' and ";
}
if (form.getLink().trim().length() > 0) {
String link = form.getLink();
sql += "n.link = '" + link + "' and ";
}
if (form.getConteudoResumo().trim().length() > 0) {
String resumo = form.getConteudoResumo();
sql += "n.resumo like '%" + resumo + "%') and ";
}
if (form.getDataInicio() != null && form.getDataTermino() != null) {
String dataInicio = format.format(form.getDataInicio());
String dataTermino = format.format(form.getDataTermino());
sql += "n.data > '" + dataInicio + "' and n.data < '" + dataTermino + "' and ";
} else if (form.getDataInicio() != null) {
String dataInicio = format.format(form.getDataInicio());
sql += "n.data > '" + dataInicio + "' and ";
} else if (form.getDataTermino() != null) {
String dataTermino = format.format(form.getDataTermino());
sql += "n.data < '"+ dataTermino + "' and ";
}
sql = sql.substring(0, sql.length() - 4);
sql += " order by n.data desc";
//log.info(sql);
List noticias = getEntityManager().createQuery(sql).getResultList();
//noticiaList.getEntityManager().createQuery(sql).getResultList();
//Query query = entityManager.createQuery(sql);
//List<Noticia> list = query.getResultList();
log.info("Resultados encontrados: " + noticias.size());
return "/noticia/listarNoticias.xhtml";
}[/code]
A página responsável por exibir os resultados da busca (esta página faz referência a variável resultList da classe EntityQuery)
<rich:dataTable id="noticias" var="_noticia"
value="#{noticiaList.resultList}"
rendered="#{not empty noticiaList.resultList}" rows="10">
<h:column>
<f:facet name="header">#{messages['noticia.noticia.label']}</f:facet>
<s:link id="noticia"
value="#{_noticia.titulo}"
propagation="none"
view="/noticia/visualizarNoticia.xhtml">
<f:param name="noticiaId"
value="#{_noticia.id}"/>
</s:link>
</h:column>
<h:column>
<f:facet name="header">#{messages['noticia.data.label']}</f:facet>
<h:outputText value="#{_noticia.data}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:outputText>
</h:column>
<h:column rendered="#{noticiaHome.ehAdministrador}">
<s:link id="editarNoticia"
value="#{messages['comando.editar']}"
propagation="none"
view="/noticia/noticia.xhtml">
<f:param name="noticiaId"
value="#{_noticia.id}"/>
</s:link>
</h:column>
</rich:dataTable>
E por fim o conteúdo da classe NoticiaList.
[code]package br.ufrj.cos.portalfees.session.noticia;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityQuery;
import br.ufrj.cos.portalfees.entity.Noticia;
@Name(“noticiaList”)
public class NoticiaList extends EntityQuery
{
public NoticiaList()
{
setEjbql(“select noticia from Noticia noticia order by noticia.data desc”);
}
}
[/code]
Como não estou habituado a utilizar esta arquitetura, não tenho certeza se o que estou fazendo está correto.
Agradeço pela ajuda!
Abraço!