RichFaces, não executa o método do backing bean. Que faço?

16 respostas
R

Olá colegas,

Não consigo de forma alguma chamar/executar um método no bean, alguém já passou por isso?

Consigo preencher perfeitamente o controle suggestionbox, ocorre que ao clicar no nome da pessoa a tag action não executa o método associado ctrlDados.procuraPessoa. Já executei o debug, mas o fluxo jamais chega até o método.

A minha intenção é que quando o usuário selecionar uma pessoa seja executado o método que procura esta pessoa na tabela (a busca será pelo ID), e depois o form exiba todos os dados da pessoa selecionada. Por isso que coloquei o parâmetro <f:param name=“iddado” value=“result.iddado” />

Já testei as versões 3.1.2, 3.1.3 e 3.1.4 do RichFaces. Já nem sei o que pode estar errado.

Utilizo Netbeans 6 com hibernate, jsf e richfaces.

Agradeço qualquer ajuda!
Rebeca

Eis o trecho JSF:

<rich:suggestionbox id=“suggestionBoxId”  for=“txtnome"

suggestionAction=”#{ctrlDados.listaNome}"

var=“result"

fetchValue=”"

minChars=“1"

border=“1"

width=“200” height=“200”>

<h:column>

<h:commandLink immediate =“true” id=“cmdlink” value=”#{result.nome}“

action=”#{ctrlDados.procuraPessoa}”>

<f:param name=“iddado” value=“result.iddado” />

</h:commandLink>

</h:column>

Eis o método:

public String procuraPessoa(){
// System.out.println(“Entrei no Método de Busca… viva!!”);

FacesContext ctx = FacesContext.getCurrentInstance();
 
  Map<String, String> params = ctx.getExternalContext().getRequestParameterMap();
  String siddado = params.get("iddado");
  Integer iddado =Integer.valueOf(siddado);
  
  DadosDAO dadosdao = new DadosDAO();
  ClsDados clsdados = dadosdao.procura(iddado);
  setClsdados(clsdados);
  return null;

}

16 Respostas

E

normalmente isso e pau de validação…

verifique os seus atributos, provavelmente você deve estar tentando setar uma string em um campo integer ou coisa do genero… o faces não avisa pra você porque sei lá gosta de guardar segredo… fico louco com isso…

R

Grata, Edpipole

Retirei todos os campos da pg. jsf e só deixei o campo do suggestionbox (que está se referindo corretamente aos devidos campos); também retirei todo o código do método do bean…

E nada! Não adiantou, o método não é executado.

Rebeca

R

Reparei que na guia Debug está aparecendo esta mensagem:

Not able to submit breakpoint MethodBreakpoint [br.org.europa.Controle.CtrlDados].procuraPessoa ‘(Ljava/awt/event/ActionEvent;)Ljava/lang/String;’, reason: Method ‘procuraPessoa’ with signature ‘(Ljava/awt/event/ActionEvent;)Ljava/lang/String;’ does not exist in class br.org.europa.Controle.CtrlDados.
LineBreakpoint CtrlDados.java : 106 successfully submitted.

Mas já alterei a assinatura para ele retornar uma String e mesmo assim não funcionou.

Grata,
Rebeca

E

qual o tipo de retorno do metodo procuraPessoa ?

R

Grata,

Era String, depois alterei para void e depois para String novamente.

Já estou considerando a hipótese de não usar RichFaces, não dá para ficar tanto tempo num único problema.

Rebeca

E

no erro acima que vc me mandou não era String, vc poderia me mandar novamente o erro sendo String o retorno agora?

maurenginaldo

Oi Rebeca,

coloca o seu bean completo e seu faces-config para dar uma olhada.

Luiz_Aguiar

Como esta seu faces-config?

muitas pessoas usam o richfaces, esse seu problema parece de configuração, não de framework, se estiver correto no face-config e na tela, vai funcionar.

rodrigoy

Veja se não está ocorrendo um erro de validação. Geralmente é isso. No JSF o post é validado antes de chamar o action method. Se for o caso, tente usar immediate=true.

Olha, em 90% das vezes é esse o problema, e é duro de constatar isso…

R

Oi,

Obrigada.

Eis o faces-config:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config>
  <!-- <converter>  
     <converter-id>integerConvert</converter-id>  
     <converter-class>br.org.europa.Util.IntegerConvert</converter-class>  
   </converter>  
  --> 
  <managed-bean>
       <managed-bean-name>ctrlDados</managed-bean-name>
       <managed-bean-class>br.org.europa.Controle.CtrlDados</managed-bean-class>
       <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
   
    <navigation-rule>
        <from-view-id>/frmDados.jsp</from-view-id>
        <navigation-case>
	     <from-outcome>novo</from-outcome>
	     <to-view-id>/frmDados.jsp</to-view-id>
	</navigation-case>
        <navigation-case>
	     <from-outcome>pesquisa</from-outcome>
	     <to-view-id>/frmDados.jsp</to-view-id>
	</navigation-case>
        <navigation-case>
	     <from-outcome>inserido</from-outcome>
	     <to-view-id>/frmDados.jsp</to-view-id>
	</navigation-case>
        
    </navigation-rule>             
</faces-config>

Eis o controle (facade) que também estou utilizando como backing bean:

package br.org.europa.Controle;
import java.beans.*;
import java.util.Iterator;
import java.util.List;
import java.lang.String;
import java.util.ArrayList;
import java.io.Serializable;
import br.org.europa.ClsMala.ClsDados;
import br.org.europa.ClsMala.ClsGrupos;
import br.org.europa.DAO.DadosDAO;
import br.org.europa.DAO.GrupoDAO;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
 /**
  * @author Reb
  */
 public class CtrlDados  implements Serializable{
    String s_proc;
    private ClsDados clsdados;
    DadosDAO dadosdaolist = new DadosDAO();
    List lstnomeslist = dadosdaolist.ListaTudo(); 
   
    public CtrlDados() {
         this.clsdados = new ClsDados();
    }
 public String novo(){
       this.clsdados = new ClsDados();
        return "novo";
    }
 public void setClsdados(ClsDados clsdados){
      
     this.clsdados = clsdados;
   }   
 public ClsDados getClsdados(){
       return this.clsdados;
   }
 public void limpar(){
     this.clsdados = new ClsDados();
 }
 public String criar(){
     DadosDAO dadosdao = new DadosDAO();
     dadosdao.salva(this.clsdados);
     clsdados = null;
     this.limpar();
     return "inserido";
  }   
   public ClsDados getTodos() throws  Exception{ 
      DadosDAO dadosdao = new DadosDAO();
      ClsDados clsdados = new ClsDados();
      List ldados =  dadosdao.ListaTudo();
  
    if (ldados != null){
       for (int i=0; i < ldados.size(); i++) {
            clsdados = (ClsDados) ldados.get(i);
       }
      } 
       return clsdados;
     }
    
   public String editar() throws  Exception{
      ClsDados clsdados = getRetornaDados();
      setClsdados(clsdados);
      return "editar";
   }
   
   //public void procuraPessoa(ActionEvent event) {
   public String getProcuraPessoa(){
        System.out.println("Entrei no Método de Busca... viva!!"); 

        FacesContext ctx = FacesContext.getCurrentInstance();
        Map<String, String> params = ctx.getExternalContext().getRequestParameterMap();
        String siddado = params.get("iddado");
        Integer iddado =Integer.valueOf(siddado);

        DadosDAO dadosdao = new DadosDAO();
        ClsDados clsdados = dadosdao.procura(iddado);
        setClsdados(clsdados);
        return null;
   }  
   public java.util.List<SelectItem> getlistaGrupos(){
       GrupoDAO grupodao = new GrupoDAO();      
       List list = grupodao.ListaGrupos();
       java.util.List<SelectItem> lsgrupos = new ArrayList<SelectItem>();
       for (Object o : list) {
          ClsGrupos grp = (ClsGrupos) o;
          lsgrupos.add( new SelectItem(grp.getIdgrupo(), grp.getGrupo()));
       }
       return lsgrupos;
    }  
     
    public List  listaNome(Object suggest){

      String pref = (String) suggest;
      ArrayList result = new ArrayList();
      //Aqui preenche a lista com nomes
      Iterator it = lstnomeslist.iterator();
      while (it.hasNext()){
         ClsDados clsdados = (ClsDados) it.next();
         if ((clsdados !=null && clsdados.getNome().toLowerCase().indexOf(pref.toLowerCase())==0) || "".equals(suggest)){
            result.add(clsdados);
             
         } 
      }
      return result;
    }  
      
 }
R

Reparei também que ocorre este erro “not allowed in a template text body”, ocorre quando coloco a instrução <a4j:commandLink reRender=“txtnome” action="#{ctrlDados.Procura}" value="#{result.iddado}"/>

Aliás, qualquer referencia a action dá este erro. Já procurei na a Web e não encontrei uma explicação para isso.

Rebeca

maurenginaldo

Existe esse método no seu bean?

#{ctrlDados.Procura},

procurei no seu post anterior e não encontei.

Luiz_Aguiar

Seria o método ProcuraPessoa, certo Rebeca?

coloque ele asism: action="#{ctrlDados.procuraPessoa}"

com a primeira letra em minusculo.

Zeed01

Rebeca,

//public void procuraPessoa(ActionEvent event) {
   public String getProcuraPessoa(){

O metodo acima não deveria chamar procuraPessoa ?
Veja que na linha sem comentário esta getProcuraPessoa.

[]s

R

Agradeço a todos. Estão sendo muito gentis.

Em relação a assinatura do método, ele se chama mesmo procuraPessoa (é que já o mudei diversas vezes) e na classe está como getprocuraPessoa (fiz isso para que o NetBans permitisse que eu utilizasse o autocomplete na pg. jsp).
Mesmo assim, eu tentei usar procuraPessoa, ProcuraPessoa e até getprocuraPessoa e também getProcuraPessoa.

A única forma que não dá o erro “not allowed in a template text body” é utilizando a síntaxe abaixo. No entanto, o método não é executado.

<h:column>
<h:commandLink immediate =“true” id=“cmdlink” value="#{result.nome}“
action=”#{ctrlDados.procuraPessoa}">
<f:param name=“iddado” value=“result.iddado” />
</h:commandLink>
</h:column>

Além de usar <a4j:commandLink reRender=“txtnome” action="#{ctrlDados.procuraPessoa}" value="#{result.iddado}" />
usei também <a4j:support event=“onselect” actionListener="{ctrlDados.procuraPessoa}" ajaxSingle=“true” />

Deve ser algum detalhe na configuração… sei lá!

Qualquer dica será bem vinda.

Tchau
Reb

fabioebner

Rebeca tente usar +/- assim:

import javax.faces.event.ActionEvent;

public Sttring procuraPessoa(ActionEvent evt){

return ae;

}
Criado 19 de fevereiro de 2008
Ultima resposta 9 de abr. de 2008
Respostas 16
Participantes 7