0

所以基本上我的问题是我有一个字符串数组列表,其中包含一些字母上带有重音的单词。当我将此 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>
4

1 回答 1

1

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

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

-> 使用 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);
  }
}

请参阅使用 PrimeFaces 的编辑器组件输入中文。

于 2016-07-22T22:12:13.577 回答