【问题标题】:Request parameter encoding seems to not be set to UTF-8请求参数编码似乎没有设置为 UTF-8
【发布时间】:2013-10-05 05:21:28
【问题描述】:

我有一个简单的 xhtml 页面,该页面由来自 Glassfish 4 中托管的 Entity 类的 Netbeans 7.3.1 模板生成。Entity 类仅包含两个字段,一个 ID 和一个 Name。如果我在“名称”字段中写下“café”这个词,那么它会保存“café”。我遵循了互联网上发布的每条建议,但都失败了。它们都没有工作,至少对于 JSF 2.2 没有。

我尝试创建自定义过滤器;使用 Spring CharacterEncodingFilter 过滤器,标题都包含 charset->UTF-8。我用 Firebug 检查了页面的字符集,上面写着 UTF-8。

我的想法已经不多了。有人有吗?

顺便说一句,同一个网站项目包含一个 RESTful Web 服务,并且该 Web 服务完美地保存了相同的实体和相同的值 (café)。所以,这让我得出结论,问题出在 Facelets 上,但在哪里?

我正在使用这个过滤器:

public class CharacterEncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void destroy() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

还有web.xml

<filter>
    <filter-name>UTFEncodingFilter</filter-name>
    <filter-class>filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UTFEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

告诉我这个过滤器没有被使用,我在Init方法上放置了一个throw Exception,页面加载和发布正常。

【问题讨论】:

  • @BalusC,您必须停止发布好的 QA 帖子。你能看到你在做什么吗?你说正确答案是错误的,你说我是问题,然后你称我为愚蠢,你更改了一个显示我正在使用的特定 JSF 版本的好帖子标题,最后你发布了一个不起作用的答案对于这个版本的 JSF(我试过没有例外)。你怎么了?如果您愿意,您可以提供新的建议,但取消其他人的工作资格不会让您有任何成就。
  • 答案显示了 Glassfish 特定的解决方案,而不是 JSF 特定的解决方案,因此不可移植;我并没有直接当面骂你傻,只是说你从原标题和代码的组合上“看起来”很傻; JSF 版本已经被提及;你没有提到你没有例外地尝试过。我的答案对我有用,否则我没有发布。显然,在你的环境中还有更多的问题。也许您正在使用 PrimeFaces?或者您实际上是在处理 GET 请求而不是 POST 请求?

标签: jsf utf-8 character-encoding facelets servlet-filters


【解决方案1】:

你有没有尝试把你的编码放在服务器配置文件本身。例如在 glassfish-web.xml 中放这一行

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

【讨论】:

  • 也可以在web.xml 中验证。
  • 从技术上讲,考虑到这个问题,这不是一个解决方案,而是一种解决方法。如果将 webapp 部署到不同的服务器品牌/版本,它仍然会失败。
【解决方案2】:

我知道这是一个老问题,但几天前我遇到了这个问题,我正在使用 glassfish 4。

我所做的如下:

  1. 在 WEB-INF 下的项目中,我创建了一个名为“glassfish-web.xml”的 xml 文件。
  2. 在 glassfish-web.xml 中我添加了参数编码标签,accept-charset 等于 UTF-8,如下所示:

<glassfish-web-app>

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

</glassfish-web-app>

希望对某人有所帮助,因为起初我认为“glassfish-web.xml”已经与 glassfish 文件一起创建,然后我意识到,我必须在我的项目中创建它。

【讨论】:

    【解决方案3】:

    您的具体问题是因为您的过滤器未能初始化,因此从未投入使用。

    您的过滤器未能初始化,原因很简单,因为您在 init() 方法中抛出了异常。

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    

    如果您希望过滤器成功初始化,则不应在 init() 中引发异常。

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // NOOP.
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多