将UTF-8字符串发送到托管bean不起作用

时间:2012-06-06 13:21:24

标签: jsf utf-8 character-encoding glassfish

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets" >
    <head>
    </head>

    <h:form>
        <h:body>
            <h:inputText value="#{editorBean.value2}" />
            <h:commandButton action="content.xhtml" value="Submit" />
        </h:body>
    </h:form>
</html>
  • value 2是sessionscoped ManageBean中的String
  • 使用JSF Mojarra 2.1.19
  • Glassfish 3.1.2

当我输入äüö并提交表单时,它在标准输出显示为äöü

但是如果我使用ajax,那么这不会发生。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:2)

JSF / Facelets在整个过程中默认使用UTF-8。

您只需要告诉Glassfish请求参数是使用UTF-8编码的,这样它就可以使用UTF-8正确解码它。打开/WEB-INF/glassfish-web.xml文件,将以下条目添加到<glassfish-web-app>

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

顺便说一句,<h:form>必须在<{1}}内 ,而不是在外面。此外,您应该使用<h:body>而不是<h:head>,以便让JSF自动包含正确的Ajax脚本。