richFaces suggestionbox! Enviar parametro para o Bean

Eu consegui fazer o componente funcionar…
A situação é seguinte :

Eu consulto no banco as Pessoas. E no Txt do suggestionbox o usuario digita o Nome de quem ele quer consultar e etc…
Mas agora eu quero pegar o ID ou o Nome da Pessoa que ele selecionar… Para fazer alguma coisa… Por exemplo deletar ela… (O cara seleciona um nome na box, e eu deleto essa pessoa do banco!).

Para fazer isso eu tentei varias coisas!

1° Tentei usar um simples actionListener do commandLink, mas não funciona. Como que se o componente
não aceitasse o action de um commandLink(Fiz iqual o Exemplo da Java Magazine Edição 46)! Mas não
funciona mesmo.

2° Enviar um parametro pro Bean(usando o <f:param value="#{varLista.id}" …/> ) depois de um
actionListener de um <a4j:support event=“onselect” actionListener="…" ajaxSingle=“true” …/>
Mas ele sempre envia um null, sempre… como que se o value fosse perdido no meio do caminho !
Mas se eu usar um <f:param value=“Oioioioioi” …/> ) o valor chega normalmente…

 <h:inputText id="InputText" value=""/>
 <rich:suggestionbox for="InputText" var="newLista" minChars="1" suggestionAction="#{perfilAcessoBean.sugestao}" width="500" height="525">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}" actionListener="#{perfilAcessoBean.actionEvento}" action="#{perfilAcessoBean.actionEvento}"/>
     	<f:param id="documentB" name="id" value="#{newLista.acao}" />
     </h:commandLink>
   </h:column>
  </rich:suggestionbox> 

O action nunca funciona…


 <rich:suggestionbox for="InputText" var="newLista" minChars="1" suggestionAction="#{perfilAcessoBean.sugestao}" width="500" height="525">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}">
     	<f:param id="paramA" name="id" value="#{newLista.acao}" />
         <f:param id="paramB" name="id" value="#{newLista.id}" />
         <f:param id="paramC" name="id" value="#{newLista}" />
     </h:commandLink>
     
   </h:column>
    <a4j:support event="onselect" actionListener="#{perfilAcessoBean.actionEvento}" action="#{perfilAcessoBean.actionEvento}" ajaxSingle="true" /> 
  	<f:param id="paramX" name="id" value="OIoioioi" />	
  </rich:suggestionbox> 

paramA,B,C vem Sempre nulo, paramX vem normalmente…

A unica forma de fazer eventos funcionarem foi com o a4j:support, De qualquer outro jeito que eu tentei
não funcionou !!

E agora como enviar um simples parametro para o Bean ! Seja o id da Pessoa ou o proprio nome dela… ??

Amigo, eu fiz o exemplo da JavaMagazine e funcionou normalmente.

Tente colocar o seu código do backing bean para a gente olhar melhor.

Abraços.

Vou colocar o que eu fiz a partir do exemplo da revista.

Na .jsp

 <h:inputText id="InputText" value=""/>
 <rich:suggestionbox for="InputText" var="newLista" minChars="2" suggestionAction="#{perfilAcessoBean.sugestao}" width="200" height="200">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}" action="#{perfilAcessoBean.actionEvento}">
     </h:commandLink>
   </h:column>	
  </rich:suggestionbox> 

No Bean

	public List sugestao(Object event){
    
		  String prefixo = event.toString();        
		  AtribuicaoTO atrib = new AtribuicaoTO();
	
		  atrib.setAcao(prefixo);
		  ListaPaginada lista = this.getNegocioAtribuicao().listar(atrib, getInfo());

		  List<TransferObject> Lista = lista.getList();
		  
	      List<AtribuicaoTO> retorno = new ArrayList<AtribuicaoTO>();
	      for(int ind = 0; ind < Lista.size(); ind++){
	          if(((AtribuicaoTO) Lista.get(ind)).getAcao().startsWith(prefixo)){                
	              retorno.add((AtribuicaoTO) Lista.get(ind));
	          }
	      }
	  	  return retorno;
  }
	public void actionEvento(){
	    FacesContext context = FacesContext.getCurrentInstance();
		Map Mapa = context.getExternalContext().getRequestMap();
		AtribuicaoTO atrib = (AtribuicaoTO) Mapa.get("newLista");
		System.out.println("Entrou no Evento");	
	}

A box com as sugestões aparece tranquilamente… !
mas eu clico no commandLink, e ele não entra no metodo “actionEvento” mas nem a pau !! (Só com a4j:support) que eu conseguir entrar… mas nesse caso os parametros vem nullos…
Mas vamos tentar resolver o 1° problema, ai depois eu vejo o resto hehe!

vlwS aew… xD

Amigo,

Seguinte, achei um problema no seu código, veja se é isso ae:

Primeiro quando você coloca:

<h:commandLink id="idCmdlnkid" value="#{newLista.acao}" action="#{perfilAcessoBean.actionEvento}">

O método no backing bean deve retornar uma String que o navigation-rules irá direcionar para outra página. E pelo que eu vi no seu bean o método está retornando void, ai se não me engano, o faces não consegue encontrar o método.

Se você quiser chamar um método que não redirecione, substitua no commandLink por actionListener, assim:

<h:commandLink id="idCmdlnkid" value="#{newLista.acao}" actionListener="#{perfilAcessoBean.actionEvento}">

Mas ai no seu backing bean ele deve receber um parametro ActionEvent, ficando assim:

public void actionEvento(ActionEvent event){
 ...

Se não der certo avise ai para a gente tentar resolver…

Abraços…

Realmente não funciona das 2 maneiras…

1° na JSP

 <rich:suggestionbox for="InputText" var="newLista" minChars="2" suggestionAction="#{perfilAcessoBean.sugestao}" width="200" height="200">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}" action="#{perfilAcessoBean.actionEvento}">
     </h:commandLink>
   </h:column>	
  </rich:suggestionbox> 

1° no Bean

	public String actionEvento(){
		System.out.println("Entrou no Evento");	
		return "listarN";
	}


2° na JSP

 <rich:suggestionbox for="InputText" var="newLista" minChars="2" suggestionAction="#{perfilAcessoBean.sugestao}" width="200" height="200">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}" actionListener="#{perfilAcessoBean.actionEvento}">
     </h:commandLink>
   </h:column>	
  </rich:suggestionbox> 

2° no Bean

	public void actionEvento(ActionEvent event){
	System.out.println("Entrou no EventoListener");	
	}

Cara, muito estranho… infelizmente não achei outro problema ai no seu código. Se eu pensar em algum outro motivo eu te aviso aqui.

Desculpa não ter ajudado.

Abraços.

Eu tentei usar assim tambem…

 <rich:suggestionbox for="InputText" var="newLista" minChars="2" suggestionAction="#{perfilAcessoBean.sugestao}" width="200" height="200">
   <h:column>
     <h:commandLink id="idCmdlnkid" value="#{newLista.acao}" action="#{perfilAcessoBean.ptReturn}">  
     </h:commandLink>
   </h:column>	
        <a4j:support event="onselect">
      	<f:setPropertyActionListener value="#{newLista.acao}" target="#{perfilAcessoBean.strString}" />
       </a4j:support>      
  </rich:suggestionbox> 

Mas assim como no caso do <f:param/> o valor setado nessa propriedade “strString” é null…
Mas se eu usar assim :
<f:setPropertyActionListener value=“Oioio” target="#{perfilAcessoBean.strString}" />
funciona normalmente…

Gostaria de voltar com esse tópico pois eu estou com o problema identico.

Uso o RichFaces 3.1.2 e não posso atualizá-lo.

A versão do MyFaces é a 1.1.5.

Se alguém puder me ajudar agradeço.

Se alguem souber em qual versão esse bug foi corrigido tbm ajuda. Mas preciso de uma versão que não de pau no MyFaces. Tentei a versão 3.2.0 mas deu pau no myfaces.

Obrigado!