字符编码导致JSF中的乱码字符

3
我将翻译以下与JSF相关的文档。
<h:panelGrid columns="2">
                <h:outputText value="Klubbnamn"></h:outputText>
                <h:inputText name="clubname" value="#{club.name}"></h:inputText>
            </h:panelGrid>
            <h:commandButton value="Spara" action="#{serviceHCP.saveClub(club) }"></h:commandButton>

当我将åäö作为posting的值时,它会被渲染成åäö。在xhtml文件中编写的所有内容都看起来正常,只有发布的值会出现乱码。如果我在java类中硬编码它,它将正确保存在数据库中。所以我确定是post出现了问题。

我尝试将网页切换到is0-8859-1,但没有结果。Tomcat报告默认为utf-8。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml"><head><link type="text/css" rel="stylesheet" href="/BowlingFacelets/faces/javax.faces.resource/theme.css?ln=primefaces-aristo" />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Default title</title>
  <link rel="stylesheet" type="text/css" href="hcp-style.css" /></head>

<body>

.....

<td>ID</td>
<td>klubb</td>
</tr>
<tr>
<td>1</td>
<td>åäö</td>
 ....
1个回答

2
这明显是请求编码的问题。你应该使用FireBug或类似Wireshark的工具检查HTTP POST请求的请求字符编码头。
在请求头中查找Content-Type。它必须包含:charset=utf-8 如果不是这种情况,那么你的设置中有些问题,因为JSF应该处理请求字符编码。
尽管如此,你可以尝试在自制过滤器中设置字符编码。可能会像这样:
    @WebFilter("/*")
    public class CharEncodingFilter implements Filter {

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

参见: 类似的问题:

只是为了像我一样遇到“@WebFilter无法解析”问题的人可以在这里查看:http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.0.1 - kavain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接