JSF - parâmetro em commandLink

Fiz uma página de busca onde trago os resultados em uma tabela, e estou tentando criar um link nos registros que mande para a página de alteração com o registro selecionado.
Bom, dos métodos que encontrei p/ fazer isso, achei mais interessante o de colocar um <f:param> no link que passe o código do registro, porém está ocorrendo um erro quando coloco no value do <f:param> o atributo codigo do meu java bean (que é um Integer). Meu código está assim:

&lt;ui:tableColumn headerText="Código" id="tableColumn1"&gt;
   &lt;h:commandLink action="#{FrmConvenioConsulta.linkAction1_action}" actionListener="#{FrmConvenioConsulta.selConvenioListener}" id="linkAction1"&gt;
      &lt;ui:staticText id="staticText1" text="#{currentRow.value['codigo']}"/&gt;
      &lt;f:param id="codigoParam" name="codigoParam" value="#{currentRow.value['codigo']}"/&gt;
   &lt;/h:commandLink&gt;
&lt;/ui:tableColumn&gt;

Aparece um erro logo que a página é carregada, e é justamente pelo valor do atributo código ser um inteiro… pois se eu colocar um outro atributo que seja um string por exemplo, não dá erro (mas isso não me interessa, pois preciso passar o código mesmo, rs)
“Exception Details: org.apache.jasper.JasperException
java.lang.Integer”

Achei estranho, pois se, ao invés de criar um link, eu colocar uma coluna a mais, com um botão e colocar este mesmo <f:param> dentro do botão com o código, ele funciona certinho. Mas eu gostaria de fazer com um link mesmo.

Alguém tem idéia do que pode ser?
Obrigado.

.

  • Repost

Olá,

Eu tenho o problema oposto, eu consigo passar parametro
via commandLink e nao consigo passar via commandButton.

Segunda-Feira eu colo pra voce como faz pra passar
parametro via commandLink. Se eu nao colar manda PM
me lembrando que eu colo pra você…

Valeu? Até… :thumbup:
[s]

se tu puder utilizar o tomahawk (componentes extras do MyFaces)
da pra fazer assim:

&lt;h:commandLink action="#{home.editar}"&gt; &lt;t:updateActionListener property="#{home.usuario.cpf}" value="#{ent.cpf}" /&gt; &lt;/h:commandLink&gt;

[quote=urubatan]se tu puder utilizar o tomahawk (componentes extras do MyFaces)
da pra fazer assim:

&lt;h:commandLink action="#{home.editar}"&gt; &lt;t:updateActionListener property="#{home.usuario.cpf}" value="#{ent.cpf}" /&gt; &lt;/h:commandLink&gt;[/quote]

Qual a vantagem de se usar este t:updateActionListener?? O efeito é o mesmo do f:param?
Bom, a lógica do que eu tinha feito é a mesma, coloquei

<h:commandLink>
<f:param>
</h:commandLink>

Mas se eu coloco um atributo “Integer” no value do meu f:param (o código por exemplo), ele dá aquele erro que eu falei… se eu colocar um atributo que é string ele aceita… achei muito estranho, pois se eu fizer o mesmo f:param dentro de um botão com o atributo Integer, ele funciona normal…
Tem idéia do que poderia estar acontecendo?
Valeu.

Eu passo parametros por commandLink assim:

.JSP:

&lt;h:commandLink action="#{endereco.adicionarEndereco}" value="Salvar"&gt;
    &lt;f:param value="#{entidade.id}" name="entidadeId"/&gt;
&lt;/h:commandLink&gt;

.JAVA

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
      
long idEntidade = new Long( req.getParameter(&quot;entidadeId&quot;) ).longValue();
System.out.println(&quot;--&gt;&gt; &quot; + idEntidade + &quot; &lt;&lt;--&quot;);

Valeu? Até… :thumbup:
[s]

&lt;t:updateActionListener property="#{home.usuarioCartao.cpf}" value="#{ent.cpf}" /&gt;
que ja sera o parametro direto em uma propriedade que eu especifiquei, no caso acima setando a propriedade home.usuarioCartao.cpf, com o valor do cpf da linha atual :smiley:

e ja faz as conversões de tipo automaticamente :smiley:

Eu estou exatamente com o mesmo problema.
Já fiz várias buscas para resolver o problema mas até agora não encontrei nenhuma solução.
Alguém sabe explicar por que isso acontece?

Eu sei que esse tópico é antigo, mas para ajudar:

Página:

<h:form id="productDetail"> 
    <h:commandLink value="Info" action="#{shopController.productDetail}">
        <f:param id="id" value="#{item.id}" name="id"/>
    </h:commandLink>
</h:form>

Método ShopController#productDetail() :

	public String productDetail() {
        //Pega o parâmetro via request.
		String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
		if (id == null) {
			return null;
		}
		try {
			this.product = facade.getProduct(new Integer(id));
		} catch (NumberFormatException e) {
			FacesUtil.mensErro("", FacesUtil.getMessage("shopControllerErrorFormatIdProduct"));
		} catch (ServiceException e) {
			FacesUtil.mensErro("", FacesUtil.getMessage("shopControllerErrorGetProduct"));
		}
		
		return "descriptionProduct";
	}

Valeu!!!

Valeu danielso2007 .

Eu uso f:setPropertyActionListener e sempre funcionou…

Aqui tá um exemplo de um sistema daqui. Sessão aqui não se refere a escopo, mas sim a reunião.

&lt;h:commandLink value="Adiar sessão" action="#{SessaoMB.adiarSessao}" rendered="#{sessao.adiamentoSessao}"&gt;
     &lt;f:setPropertyActionListener target="#{SessaoMB.sessao}" value="#{sessao}"/&gt;
&lt;/h:commandLink&gt;

[quote=thierrypin]Eu uso f:setPropertyActionListener e sempre funcionou…

Aqui tá um exemplo de um sistema daqui. Sessão aqui não se refere a escopo, mas sim a reunião.

&lt;h:commandLink value="Adiar sessão" action="#{SessaoMB.adiarSessao}" rendered="#{sessao.adiamentoSessao}"&gt; &lt;f:setPropertyActionListener target="#{SessaoMB.sessao}" value="#{sessao}"/&gt; &lt;/h:commandLink&gt; [/quote]
Esse post pode ser velho mas me ajudo em uma duvida que eu tava parada a quase uma semana, vlw pessoal !