所以基本上我的问题是我有一个字符串的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" >
<h:outputText value="Plat origem:" />
<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>
答案 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);
}
}