Problema com consulta like hql, jsf e jpa

1. Problema com consulta like hql, jsf e jpa

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 12:09h

Olá pessoal, estou com um problema relativamente simples, porém quebrando a cabeça não consegui realizar uma pesquisa:
Bem, a ideia é simples, a partir de uma String Nome () obter e passá-la para uma listagem.
O método, retornaria uma lista e em seguida pudesse ser obtida numa outra página, embora, por alguma incrível razão obtenho uma excessão de que o método não existe:

Isto está declarado em uma interface DAO:


public List<Empresa> buscarPorNome(String nome);



Isto está declarado em uma classe chamada DAOHibernate:

@SuppressWarnings("unchecked")
public List<Empresa> buscarPorNome(String nome) {
Query query = this.session.createQuery("select e from Empresa e where e.nome LIKE = :nome%");
query.setString("nome", nome);
return query.list();
}


É tratado assim em uma classe de Regra de Negócio

public List<Empresa> buscaPorNome(String nome) {
return this.empresaDAO.buscarPorNome(nome);


e obtida assim em um ManagedBean:
	public List<Empresa> getBuscarPorNome() {
String nome = empresa.getNome();
if (this.listagem == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.listagem = empresaRN.buscaPorNome(nome);
}
return this.listagem;
}


Tento obter assim na página:

<h:commandLink action="#{empresaBean.buscarPorNome}" immediate="true" title="Pesquisar">
<h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0"/>
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa}" />
<f:setPropertyActionListener target="#{empresaBean.destinoSalvar}"value="/publico/pesquisa">
</f:setPropertyActionListener>
</h:commandLink>



a Excessão:


javax.el.MethodNotFoundException: /publico/index.xhtml @73,25 action="{empresaBean.buscarPorNome}": Method not found: com.portal.web.EmpresaBean@10dd7cea.buscarPorNome()



  


2. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 17:56h

A classe EmpresaBean está anotada com "@ManagedBean"?


3. Resposta à classe

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 22:28h

Sim, a classe está anotada, inclusive a classe e o método aparecem no autocomplete do eclipse, porém a excessão é a mesma.


4. Classe EmpresaBean

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 22:31h

package com.portal.web;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import com.portal.empresa.Empresa;
import com.portal.empresa.EmpresaRN;

@ManagedBean
@RequestScoped
public class EmpresaBean {
private Empresa empresa = new Empresa();
private EmpresaRN empresaRN = new EmpresaRN();
private List<Empresa> lista;
private List<Empresa> listagem;
private List<Empresa> empresas;
private String destinoSalvar;

public String novo() {
this.destinoSalvar = "empresaSucesso";
this.empresa = new Empresa();
return "empresa";
}

public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
if (isEmpresaCadastrada(empresa)) {
FacesMessage facesMessage = new FacesMessage("Digite um nome diferente de empresa, esta j&#65533; est&#65533; cadastrada.");
context.addMessage(null, facesMessage);
return null;
}
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.salvar(this.empresa);
return "empresaSucesso";
}

public String editar() {
return "/admin/empresa";

}

public String excluir() {
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.excluir(this.empresa);
this.lista = null;
return null;
}

public List<Empresa> getLista() {
if (this.lista == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.lista = empresaRN.listar();
}
return this.lista;
}

public List<Empresa> getBuscarPorNome() {
String nome = empresa.getNome();
if (this.listagem == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.listagem = empresaRN.buscaPorNome(nome);
}
return this.listagem;
}

public boolean isEmpresaCadastrada(Empresa empresa) {
return empresaRN.verificaEmpresa(empresa.getNome());
}

public List<Empresa> getListagem() {
return listagem;
}

public void setListagem(List<Empresa> listagem) {
this.listagem = listagem;
}

public void setLista(List<Empresa> lista) {
this.lista = lista;
}

public Empresa getEmpresa() {
return empresa;
}

public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}

public EmpresaRN getEmpresaRN() {
return empresaRN;
}

public void setEmpresaRN(EmpresaRN empresaRN) {
this.empresaRN = empresaRN;
}

public String getDestinoSalvar() {
return destinoSalvar;
}

public void setDestinoSalvar(String destinoSalvar) {
this.destinoSalvar = destinoSalvar;
}

public List<Empresa> getEmpresas() {
return empresas;
}

public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}

}




5. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 22:51h

Tenta isso:



public List<Empresa> getListagem() {
return getBuscarPorNome();
}





<h:commandLink action="#{empresaBean.listagem}" immediate="true" title="Pesquisar">
<h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0"/>
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa}" />
<f:setPropertyActionListener target="#{empresaBean.destinoSalvar}"value="/publico/pesquisa">
</f:setPropertyActionListener>
</h:commandLink>




6. Re: Problema com consulta like hql, jsf e jpa

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 23:05h

Beleza, vou fazê-lo agora.


7. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 23:10h

Na EmpresaBean. O método de acesso (getListagem) da propriedade listagem invoca o método getBuscarPorNome().


8. Re: Problema com consulta like hql, jsf e jpa

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 23:10h

javax.el.MethodNotFoundException: /publico/index.xhtml @73,25 action="#{empresaBean.listagem}": Method not found: 
com.portal.web.EmpresaBean@869ee69.listagem()



9. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 23:19h

Vamos lá, acho que sei o que está errado. O atributo action do comandlink deve ser associado a um método publico do tipo void ou String. No seu caso o método getListagem e getBuscarPorNome retornam uma Collection.


10. Re: Problema com consulta like hql, jsf e jpa

Sidnei Júnior
smnj

(usa Ubuntu)

Enviado em 10/06/2012 - 23:20h

Como proceder para resolver isso?


11. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 23:23h

Tenta isso



public void getBuscarPorNome() {
String nome = empresa.getNome();
if (this.listagem == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.listagem = empresaRN.buscaPorNome(nome);
}
}





<h:commandLink action="#{empresaBean.buscarPorNome}" immediate="true" title="Pesquisar">
<h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0"/>
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa}" />
<f:setPropertyActionListener target="#{empresaBean.destinoSalvar}"value="/publico/pesquisa">
</f:setPropertyActionListener>
</h:commandLink>




12. Re: Problema com consulta like hql, jsf e jpa

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/06/2012 - 23:26h

Vai dar errado se tentar o acima:

Tenta isso:



public void buscarPorNome() {
String nome = empresa.getNome();
if (this.listagem == null) {
EmpresaRN empresaRN = new EmpresaRN();
this.listagem = empresaRN.buscaPorNome(nome);
}
}





<h:commandLink action="#{empresaBean.buscarPorNome}" immediate="true" title="Pesquisar">
<h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0"/>
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa}" />
<f:setPropertyActionListener target="#{empresaBean.destinoSalvar}"value="/publico/pesquisa">
</f:setPropertyActionListener>
</h:commandLink>





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts