Powered by Max Banner Ads 
Home > Hibernate, JSF > Busca com Hibernate Annotation + JSF

Busca com Hibernate Annotation + JSF

olá Pessoal,
Neste post resolvi, apresentar um recurso bem simples que temos no hibernate usando a linguagem HQL. Tendo como exemplo aplicação construida no post anterior: Hibernate+ Annotations, iremos apenas neste post criar 2 paginas JavaServerFaces – JSF, e alterar alguns arquivos .java para implementar um sistema de busca no sistema. A ideia aqui é mostrar a facilidade que o framework possibilita, sem falar que nao precisa modificar quase nada do que ja foi construido, apenas adicionar os novos recursos.
Lets go…

Requisitos:
É necessário ter implementado os posts abaixo, sobre hibernate. Aqui vamos apenas dar continuidade aplicação ja desenvolvida.
JSF + Hibernate + MySql no Eclipse
Hibernate Annotations + JSF + MySql

Desenvolvendo

1. Primeiro passo é atualizar a class NewsDAO.java inserindo o metodo que será responsavel por fazer a busca no BD.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//realiza a pesquisa no BD
public List consultar(String letter){
session = ConexaoFactory.getInstance();
/*para entender o HQL o from abaixo será seu bean
 *  o l eh como se fosse o ? que temos o sql usando
 *o PreparedStatement apos o where temos o campo 
 *de pesquisa que eh a coluna na tabela
 *  paraemtro da query para pesquisa do hibernate
 */
 
Query query = session.createQuery("from NewsLetter l where 
l.nome like :letter");
List list = query.setString("letter", "%"+letter+"%").list();
return list;}

2.Agora vamos criar o metodo responsável por obter os dados no BD e armazenar esses dados em um DataModel, para facilitar a busca. Para isso temos que alterar nossa classe controladora NewsControler.java

1
2
3
4
5
6
7
8
9
10
/*metodo que armazena o retorno da pesquisa em
* DataTable,de acordo o retorno do metodo 
* de pesquisa  */
public DataModel getBuscar(){
NewsDAO newsdao = new NewsDAO();
/* chamando o metodo de pesquisa 
 * e passando o valor da campo digitado
 */
model = new ListDataModel(newsdao.consultar(keynome));
return model; }

3.Agora criaremos as paginas JSF, a primeira tem o campo de busca, a segunda traz o resultado da busca.

1
2
3
4
5
6
7
8
9
10
11
<f:view>
<h:form>
<h:panelGrid>
<f:facet name="header">
<h:outputText value="Informe o nome do usuário para pesquisa" />
</f:facet>
<h:inputText value="#{newsControler.keynome}" id="nome" />
</h:panelGrid>
<h:commandButton value="Pesquisar" action="pesquisar"/>
</h:form>
</f:view>

4.Página JSF que exibi o resultado da busca exibirpesquisa.jsp(nao esqueça de importar os tagslib para o JSF.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
….
<f:view>
<h:form>
<h:dataTable value="#{newsControler.buscar}" var="us" 
cellpadding="2" cellspacing="0">
<h:column>
<f:facet name="header">
<h:outputText value="Id"/>
</f:facet>
<h:outputText value="#{us.id}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="nome do usuario"/>
</f:facet>
<h:outputText value="#{us.nome}"/>
</h:column>
</h:dataTable>
</h:form>			
</f:view>

Atualizando faces-config.xml

Deixe seu arquivo faces-config.xml conforme abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<managed-bean>
  <managed-bean-name>newsControler</managed-bean-name>
  <managed-bean-class>br.com.controler.NewsControler
</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <display-name>news</display-name>
  <from-view-id>/news.jsp</from-view-id>
  <navigation-case>
   <from-outcome>salvar</from-outcome>
   <to-view-id>/sucesso.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <display-name>buscar</display-name>
  <from-view-id>/buscar.jsp</from-view-id>
  <navigation-case>
   <from-outcome>pesquisar</from-outcome>
   <to-view-id>/exibipesquisa.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>

Testando

Agora vamos testar a nossa busca, abaixo temos a imagem do nosso BD com alguns newsletter cadastrados, assim podemos nos certificar que a busca trouxe o elemento correto.

Abraço a todos e espero que tenham gostado do post!. Até o próximo pessoal!!

Related Posts with Thumbnails
  1. December 27th, 2009 at 19:12 | #1

    Parabéns pelo post, bem simples e direto. Muito bom.

  2. camilolopes
    December 28th, 2009 at 03:52 | #2

    olá Valdemar,

    obrigado por comentar e por ter acessado o blog. Feliz ano novo para vc!

    abraco.

  3. Roberto Azevedo e Rodrigues
    May 22nd, 2010 at 00:58 | #3

    Por favor se for possivel informar a funcionalidade do “model” no exemplo 2 mostrado.

  4. camilolopes
    May 22nd, 2010 at 07:37 | #4

    olá Roberto,
    Ele vai armazenar o resultado que vem de uma pesquisa. Ou seja, se mando bsucar todos os clientes com idade > 25 eles vai retornar e terei isso em um DataModel, que posso usar em datatable para exibir o resultado da pesquisa. Pensei nele como um ArrayList de objetos vindo do BD.

    flw, abracos.

  5. Roberto Azevedo e Rodrigues
    May 26th, 2010 at 07:37 | #5

    Camilo na minha aplicação Keynome esta dando erro no controlador e não esta aparecendo pra mim no codigo html, por exemplo <value "#{controlador.keynome}" o que fazer pra resolver?

  6. May 26th, 2010 at 07:44 | #6

    olá Roberto, para ser sincero nao entendi direto sua pergunta, poderia ser mais especifico?

    abracos,

  7. Roberto Azevedo e Rodrigues
    May 26th, 2010 at 07:50 | #7

    Camilo,

    Nesse exemplo você lista os nomes em outra página, como faço pra listar em uma tabela na mesma página?

  8. May 26th, 2010 at 07:59 | #8

    opa! Roberto,
    vc vai precisar usar template do facelets para isso, dar uma pesquisada a respeito.

    abracos,

  9. Roberto Azevedo e Rodrigues
    May 26th, 2010 at 08:12 | #9

    Camilo,

    Me desculpe por estar incomodando cara, essa linha <h:dataTable value="#{newsControler.buscar}" var="us", o buscar vc declarou aonde? ou ele é do DataModel? porque esta dando erro aqui 500 na minha aplicação.

    (javax.faces.FacesException: #{Secretaria.buscar}: javax.el.MethodNotFoundException: /consulta.xhtml @28,119 action="#{Secretaria.buscar}": Method not found: secretaria.faces.Secretaria@15a740a.buscar()
    )

  10. May 26th, 2010 at 08:23 | #10

    opa! Roberto,

    Nao se preocupe, esse é o objetivo dos posts, discussao :D . Bem o buscar ele retorna um Datamodel sim veja lá getBuscar, porem no JSF temos que tirar o prefix get e converter para minusculo a primeira letra do metodo.

    Veja o metodo em acao no ponto 2 do ponto.

    A essencia deste post eh o ponto 1 e 2, o segredo está ai, o resto nao tem nada critico.

    abracos,

  11. Roberto Azevedo e Rodrigues
    May 26th, 2010 at 08:42 | #11

    Ultima pergunta, depois de clicar no buttom “Pesquisar” como faço pra limpar o nome digitado do inputTex pra pesquisar outro nome?

    Cara muito obrigado pelo exemplo e pela sua atenção conseguri testar e estar funcionando.

  12. May 26th, 2010 at 08:48 | #12

    opa! Roberto,

    Vc vai dar que dar um new para o bean no seu controlador. Algo como:
    public String limpar(){
    bean = new bean();
    return “limpar”;
    Assim ele retorna para o valor padrao do bean, que se for uma String eh recomendado ter colocado String nome = “”; por exemplo.
    Ou vc pode mudar seu managebean de session para request.
    abracos,

  13. Roberto Azevedo e Rodrigues
    May 26th, 2010 at 08:54 | #13

    Camilo eu não entendir!

    Olha só, digitei “Roberto” cliquei no pesquisar, listou Roberto, como faço pra apagar o Roberto que foi digitado? pra pesquisar outro nome, entendeu!

  14. May 26th, 2010 at 08:58 | #14

    opa! Roberto, vc está listando na mesma página? Se sim, tem que ver como apagar os dados do bean apos ter sido enviado. Agora se estive em outra pagina a exibicao, mude de session, la no managebean para request.
    abracos,

  15. Roberto Azevedo e Rodrigues
    May 27th, 2010 at 06:21 | #15

    Camilo conseguir implementar a pesquisa com seu modelo. Mais estou agora com duas ( codigo e nome), quando o usuario for fazer uma pesquisa ele tem que primeiro selecionar umas das opções radio e digitar (nome se for selecionado o radio “nome”) e codigo se for selecionado (codigo), no meu bean inserir os teste com if abaixo do (public DataModel getBuscar()). Inserir os teste com if mais não esta funcionando posso enviar o meu codigo pra você analizar?

  16. camilolopes
    May 28th, 2010 at 07:54 | #16

    olá Roberto,
    ah entendi, vc vai ter que passar o que foi selecionado para o seu HQL ou criteria. ja que seu botao tem um campo onde vc especifica o valor e o nome dele. Vc nao precisa de IF, é so passar o que foi digitado + a opcao escolha para a query de busca.
    Bem, se eu pedir para vc mandar o code, vou criar falsas esperancas que vou analisar e vc vai ficar aguardando, e para ser sincero, o tempo anda tao curto, que nao sei se ia conseguir analisar e ti dar um retorno. Peço desculpas a vc. Mas, é que estou na correira para conseguir entrar de ferias e tenho que deixar tudo ok.
    abracos,

  17. Roberto Azevedo e Rodrigues
    May 29th, 2010 at 03:12 | #17

    Camilo eu sou iniciante cara a possibilidade de postar um exemplo de como fazer isso por favor o meu codigo de consulta esta igual ao seu acima HQL e DataModel.