【问题标题】:JSF2 h:outputLink won't encode properlyJSF2 h:outputLink 无法正确编码
【发布时间】:2012-08-30 09:30:40
【问题描述】:

使用 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。但是,出于兼容性原因,如果编码不是 指定,则使用平台的默认编码。

感谢回答

【问题讨论】:

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


    【解决方案1】:

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

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

    但实际上,Chrome 和 Firefox 会在您悬停链接时在浏览器的状态栏中显示index.jsf?test=%21+åöä,当您单击链接时也会在地址栏中显示。那只是浏览器特有的功能,完全是另外一回事。

    我不确定您的具体问题是什么,因为您没有说明任何问题,但是您提出问题的方式给我的印象是请求 URL 没有被相关 servletcontainer 正确地进行 URL 解码因此您在访问请求参数时收到了mojibake

    正如您现在可能已经猜到的,这必须在 servletcontainer 方面解决。还不清楚您使用的是哪一个,因此这里有一些 Tomcat 和 Glassfish 的示例:

    • 在Tomcat中你需要将Tomcat的server.xml&lt;Connector&gt;元素的URIEncoding属性设置为UTF-8

      <Connector ... URIEncoding="UTF-8">
      
    • 在 Glassfish 中,您需要将 &lt;parameter-encoding&gt; 添加到 /WEB-INF/glassfish-web.xml

      <parameter-encoding default-charset="UTF-8" />
      

    至于“解析”(实际上,“编码”是正确的术语)+ 的空格,我不确定您为什么指出这一点,但这只是 URL 查询字符串中的空格应该如何被编码。我认为您希望它是 %20,但这只是 URL 的分层部分(查询字符串之前的部分,由 ? 分隔)中的空格应该如何编码。

    【讨论】:

    • 感谢@BalusC 很好的回答!忘了说我用的是 Tomcat,确实我很粗心,更不用说具体的问题了。对于 JSF 的事情,我有点不知所措。我不确定实际问题是什么,这是我在调查中注意到的第一件事,但它完全是一团糟。尽管如此,这很有帮助,我现在有一些好主意。哦,我只提到了+的东西,因为我通过快速阅读线程forums.oracle.com/forums/thread.jspa?threadID=2233427得到了错误的图片
    • 不客气。 %20 确实也可以用于查询字符串中的空格,但不是常见的约定(可能是因为它使它变得更大更难阅读?很少使用空格)。另见stackoverflow.com/questions/1211229/…
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2021-09-17
    • 2014-07-28
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2016-07-18
    • 2015-08-21
    相关资源
    最近更新 更多