请求参数编码似乎不设置为UTF-8

时间:2013-09-29 07:50:39

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

我有一个简单的xhtml页面,由一个Entity类的Netbeans 7.3.1模板生成,托管在Glassfish 4中.Entity类只包含两个字段,IDName。如果我在“姓名”字段中写下“café”字样,则会保存“café”。我已经按照互联网上发布的每一条建议,但都失败了。它们都没有用,至少不适用于JSF 2.2。

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

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

BTW,同一个网站项目包含一个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>

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

3 个答案:

答案 0 :(得分:4)

您是否尝试将编码放入服务器配置文件本身。例如,在glassfish-web.xml中放置此行

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

答案 1 :(得分:1)

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

我所做的是以下内容:

  1. 在WEB-INF下的项目中,我创建了一个名为“glassfish-web.xml”的xml文件。
  2. 在glassfish-web.xml中的
  3. 我添加了参数编码标签,其中accept-charset等于UTF-8,如下所示:
  4. <glassfish-web-app>
    
       <parameter-encoding default-charset="UTF-8"/>
    
    </glassfish-web-app>
    

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

答案 2 :(得分:0)

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

您的过滤器无法初始化,原因很简单,因为您在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.
}