2011-10-14 83 views
9

我使用的是动态创建的链接:JSF转换器:PARAM

  <h:link outcome="/page" value="#{name}"> 
      <f:param name="name" value="#{name}"/> 
      </h:link> 

我想将自定义转换器F:参数去从#(名称)等 删除空格但没有转换器属性在f:param。

回答

14

Converter被intented从提交String请求参数值转换成复杂的对象,反之亦然在输入字段。然而,<f:param>仅为纯输出,它始终会在该值上调用toString()。它不支持Converter

你干净,最好的办法是建立一个custom EL function,使你最终落得这样的:

<f:param name="name" value="#{util:prettyUrl(name)}"/> 

更新:JSF的工具库OmniFaces具有自1.4版本(2013年3月)一个<o:param>组件,它扩展了<f:param>,支持一个完整的JSF转换器,就像你在<h:outputText converter>中使用的一样。

<h:link outcome="/page" value="#{name}"> 
    <o:param name="name" value="#{name}" converter="somePrettyURLConverter" /> 
</h:link> 

另请参阅showcase

+1

我有同样的问题,我不是很满意这样的解决方案。在接收站点上使用'f:viewParam'来使用转换器检索Object。因此,使用'f:param'也可以直接使用转换器。由于该逻辑已经在转换器中实现。现在这个逻辑也出现在视图中,如果我改变参数,也许从名称到ID我不得不改变转换器和网站。自定义el函数将是一种解决方法,至少如果初始转换器也会使用它。 – djmj

+2

将'o:param'标签添加到他的omnifaces库中,它工作得很好。 – djmj

1

如果你做这样的事情怎么办?

<f:param name="name" value="#{name.replace(' ', '')}" /> 

这不是工作?

或者你想要所有< f:param ...?

问候

+0

其实,转换更复杂,所以我需要java函数。现在我使用托管bean函数'' – mm1

+1

@ mm1:我不认为您有另一种解决方案..它不会没有道理......你想要的是用 Alex