使用UTF-8的JSF不使用带重音的字母

时间:2013-06-05 11:56:21

标签: jsf utf-8 diacritics

所以基本上我的问题是我有一个字符串的ArrayList,其中包含一些字母带有重音符号的单词。 当我将此ArrayList的值显示为xhtml上的下拉菜单时,我会使用重音和所有内容正确获取值,但是,当我尝试提交我选择的字符串时,我收到此错误:验证错误:值无效。

xhtml页面的编码为:<?xml version='1.0' encoding='UTF-8' ?>

当我选择一个没有重音的单词时,一切都按计划进行。

我应该怎么做才能解决这个问题?感谢。

编辑:根据要求,这是代码:

<?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:p="http://primefaces.org/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <h:outputStylesheet library="css" name="tablestyle.css"  />
        <h:outputStylesheet library="css" name="pagestyle.css"  />
        <h:outputScript library="js" name="common.js" />
        <h:outputScript library="js" name="jquery-ui-1.10.3.custom.js"/>  
        <h:outputScript library="js" name="jquery-ui-1.10.3.custom.min.js"/>  
        <h:outputScript library="js" name="jquery-1.9.1.js" />
    </h:head>
    <h:body> 
        <div id="menu">
            <c:if test="#{SfpExposerBean.dataToRepresent == 'HelpRequest'}" >
                <h:form id="assistancerequest">
                    <p:poll interval="10" update="assistancerequest" /> 
                    <br/><br/>
                    <h:selectOneMenu value="${SfpExposerBean.entrPlat}" style="width: 100px" >
                        &nbsp;&nbsp;&nbsp;
                        <h:outputText value="Plat origem:" />&nbsp;&nbsp;
                        <c:forEach items="${SfpExposerBean.plats}" var="entrplat">
                            <f:selectItem itemValue="${entrplat}" />
                        </c:forEach>
                    </h:selectOneMenu>
                    <h:commandButton value="Ok" action="#{SfpExposerBean.setHelpRequests()}" style="width: 200px" id="submitAssistance" />
                </h:form>
            </c:if>
        </div>
        <div id="collapse" onclick="toggle();" />
   </h:body>
</html>

1 个答案:

答案 0 :(得分:1)

提交时,它正在检查当前请求是否是ajax请求。 request参数不是请求标头,而是标识它。在JSF视图恢复之前检索的请求参数第一次将使用服务器默认字符编码(ISO-8859-1)而不是JSF自己的默认字符编码(UTF-8)进行解析。

这可以通过以下方式解决:

- &GT;使用UTF-8设置ServletRequest #setCharacterEncoding()。通过ServletResponse#setCharacterEncoding()设置响应编码是不必要的,因为它不会受到此问题的影响。

@WebFilter("*.xhtml")
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);
  }
}

请参阅Typing Chinese with PrimeFaces' editor component.