我有一个简单的xhtml页面,由一个Entity类的Netbeans 7.3.1模板生成,托管在Glassfish 4中.Entity类只包含两个字段,ID
和Name
。如果我在“姓名”字段中写下“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
,页面正常加载和发布。
答案 0 :(得分:4)
您是否尝试将编码放入服务器配置文件本身。例如,在glassfish-web.xml中放置此行
<parameter-encoding default-charset="UTF-8"/>
答案 1 :(得分:1)
我知道这是一个老问题,但我几天前遇到过这个问题,我正在使用glassfish 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.
}