1

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

我尝试创建自定义过滤器;使用弹簧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>

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

4

3 回答 3

4

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

<parameter-encoding default-charset="UTF-8"/>
于 2013-09-29T11:34:06.807 回答
1

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

我所做的是以下内容:

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

<glassfish-web-app>

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

</glassfish-web-app>

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

于 2014-10-04T21:13:54.270 回答
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.
}
于 2013-09-30T11:01:11.157 回答