0

したがって、基本的に私の問題は、一部の文字にアクセントのある単語を含む文字列の 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>
4

1 に答える 1

1

送信時に、現在のリクエストが ajax リクエストかどうかを確認しています。リクエスト ヘッダーの代わりに、リクエスト パラメータがそれを識別します。JSF ビューが復元される前に取得されたリクエスト パラメータは、JSF 独自のデフォルトの文字エンコーディング (UTF-8) ではなく、サーバーのデフォルトの文字エンコーディング (ISO-8859-1) を使用して初めて解析されます。

これは次の方法で修正できます。

-> ServletRequest#setCharacterEncoding() を UTF-8 で設定します。ちなみに、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 に答える