【问题标题】:Problems while using Internationalization in JSF在 JSF 中使用国际化时的问题
【发布时间】:2013-02-05 09:04:22
【问题描述】:

我在尝试在 JSF 中实现国际化时遇到问题。当我在我的 UI 页面中输入一些数据(使用英语以外的语言)时,该值作为加密值存储在我的托管 Bean 变量中(甚至无法识别那是什么格式)。当我在我的 UI 页面中输入它时,我无法获得该值。 我需要将不同语言的值(来自 JSF 页面)存储在我的 MySql 数据库中。但是如上所述,我正在努力获取托管 Bean 中的输入值。 请指导我这样做。

提前致谢

【问题讨论】:

    标签: mysql jsf jakarta-ee jsf-2 character-encoding


    【解决方案1】:

    加密?你在开玩笑。很可能您实际上是指Mojibake

    为了避免 Mojibake,您需要确保在生成和使用字符时在整个应用程序中使用相同的字符编码。如今,如果您想要统治世界,UTF-8 是一个明智的选择。 JSF2 一直默认为 UTF-8。所以你的问题有点奇怪。

    也许您实际上正在使用 PrimeFaces?众所周知,在触发 ajax 请求时会弄乱默认的 UTF-8 字符编码。该部分已回答here,您需要创建一个 servlet 过滤器。

    或者也许该值实际上是正确的,但是您将该值打印到一个根本不支持 UTF-8 的输出中,因此您错误地确定了问题的原因?例如。通过 Eclipse 控制台中的System.out.println()。您需要通过 Window > Preferences > General > Workspace > Text file encoding 进行配置,如 here 的回答。

    或者您可能通过<f:view encoding> 明确地将 JSF2 编码强制为不同的东西,例如到ISO-8859-1。你不应该这样做,从<f:view> 中删除encoding 属性并保持默认。

    或者很可能您的 MySQL 数据库/表编码根本不是 UTF-8,但这与您描述的问题症状不匹配,或者您必须省略您实际打印从数据库检索的值的部分而不是从表单提交中检索到的值。

    无论如何,您需要了解的有关 Java EE Web 应用程序中字符编码的所有信息,以及所有可能的问题和解决方案都在Unicode - How to get the characters right? 中详细说明

    【讨论】:

    • 感谢 BalusC 的回答。当我输入一些值并尝试将其保存在数据库中时,我会变得像这样“விà®à®¯à¯”
    • 是的,我明白了。您是否理解答案并已应用修复?
    • 在我的页面中,我没有 AJAX 调用和 f:view.. 我也尝试了文本文件编码......没有任何结果。并且 mytable 支持 UTF-8。现在我正在阅读您的博客以正确设置角色。
    • 哦,我也许应该提一下,我假设您使用的是 Facelets,而不是它已弃用的前身 JSP。你看,你已经用[jsf2] 标记了这个问题。但是,如果您 - 完全出乎意料地 - 实际使用 JSP,那么您应该设置页面编码(或者更好的是,将其转储并替换为 Facelets)。
    • 我在 JSF 中使用 primefaces。顺便说一句,现在我的值保存在 DB 中,因为我只在第二次提交时输入(其他语言)。当我输入它作为 Mojibake 保存在 DB 中的值后提交时:(
    猜你喜欢
    • 2011-11-14
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多