richFaces suggestionbox! Enviar parametro para o Bean

9 respostas
T

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…

9 Respostas

T
<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… ??

normandesjr

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.

T

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

normandesjr

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…

T

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");	
	}
normandesjr

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.

T

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…

edysnipes

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.

edysnipes

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!

Criado 11 de outubro de 2007
Ultima resposta 22 de jan. de 2010
Respostas 9
Participantes 3