是否可以使用h:outputLink对其中带有#锚的URL进行组件编码?

时间:2011-03-04 14:42:29

标签: java url jsf url-encoding

我有一个看起来像的网址
http://server/context/page.jsf?param1=value1#state=statename::stateparam=value2

无论如何都要使用此网址并使用h:outputLink对组件(两个值)进行编码?

我试过

<h:outputLink value="page.jsf">
    <f:param name="param1" value="#{servervalue1}#state=statename::stateparam=#{servervalue2}"/>
    <h:outputText value="#{linkname}"/>
</h:outputLink>

但它会对URL的状态部分进行编码,因此它不再有效。

1 个答案:

答案 0 :(得分:1)

那是不可能的。最好的办法是创建一个自定义EL函数,调用URLEncoder#encode(),如下所示:

public static String urlEncode(String value) {
    return URLEncoder.encode(value, "UTF-8");
}

然后按如下方式使用它:

<h:outputLink value="page.jsf?param1=#{util:urlEncode(value1)}#state=statename::stateparam=#{util:urlEncode(value2)}">