JSF2 h:outputLink将无法正确编码

时间:2012-09-05 15:48:28

标签: jsf-2 character-encoding url-encoding mojarra

使用Mojarra 2.1.7

代码

<h:outputLink value="index.jsf">Login page
    <f:param name="test" value="! åöä"></f:param>
</h:outputLink>

输出: index.jsf?test =%21 +åöä

有些角色逃脱了,但其他角色没有逃脱。显然很难处理。

为什么会这样,有人知道管理这个的好方法吗?

http://docs.oracle.com/javase/6/docs/api/java/net/URLEncoder.html

似乎要使用,因为它用+。

解析空间
  

所有其他字符都不安全,首先转换为一个或   使用某种编码方案的更多字节。然后表示每个字节   由3个字符的字符串“%xy”,其中xy是两位十六进制   字节的表示。推荐使用的编码方案是   UTF-8。但是,出于兼容性原因,如果不进行编码   指定,然后使用平台的默认编码。

感谢答案

1 个答案:

答案 0 :(得分:1)

难道您不会将JSF生成的HTML代码与您在浏览器状态或地址栏中看到的内容混淆吗?当然,它已经在生成的HTML代码中完全进行了URL编码。我刚刚做了一个快速测试,并根据浏览器中的 View Source 生成(假设您没有更改UTF-8的JSF2 / Facelets默认响应编码)以下HTML:< / p>

<a href="index.jsf?test=%21+%C3%A5%C3%B6%C3%A4">Login page</a>

但实际上,当您点击链接时,Chrome和Firefox会在浏览器的状态栏中显示index.jsf?test=%21+åöä,当您点击该链接时,也会在地址栏中显示URIEncoding。这只是一个特定于浏览器的功能,这是一个完全不同的问题。

我不确定你的具体问题是什么,因为你没有说出任何关于它的信息,但你提出这个问题的方式让我觉得请求URL没有被相关的servletcontainer正确地进行URL解码因此,您在访问请求参数时收到了mojibake

正如您现在可能已经猜到的那样,这必须在servletcontainer方面解决。目前还不清楚你正在使用哪一个,所以这里有Tomcat和Glassfish的一些例子:

  • 在Tomcat中,您需要将Tomcat <Connector>server.xml元素的UTF-8属性设置为<Connector ... URIEncoding="UTF-8">

    <parameter-encoding>
  • 在Glassfish中,您需要将/WEB-INF/glassfish-web.xml添加到<parameter-encoding default-charset="UTF-8" />

    +

关于“解析”(实际上,“编码”是正确的术语)%20的空间,我不知道你为什么指出这一点,但这只是URL查询字符串中的空格如何应该编码。我认为你期望它是?,但这只是如何对URL的层次结构部分(查询字符串之前的部分,由{{1}}分隔)中的空格进行编码。