2

UTF-8文字列を値として渡そうとしましたが、値はガベージ文字列として表示されます。UTF-8を次のように要求および応答するように設定するためにf:viewParamEncodingFilterを追加しました。web.xml

HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=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:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
<f:metadata>
    <f:viewParam name="q" value="#{searchBean.query}"/>
</f:metadata>
.....
</html>

Myfaces2.0.5とMojarra2.0.5でこれをテストします

4

1 に答える 1

2

デフォルトで異なる文字エンコーディングを使用して GET クエリ文字列を解釈するサーバー構成を使用しているようです。たとえば、Tomcat はデフォルトで ISO-8859-1 として解釈します。Tomcat を開いて、値が の要素に属性を/conf/server.xml追加する必要があります。URIEncoding<Connector>UTF-8

<Connector ... URIEncoding="UTF-8">

ちなみに、そのフィルターはまったく不要です。それを除く。Facelets 上の JSF 2.x は、すでにすべてのレベルで UTF-8 にデフォルト設定されています。また、HttpServletRequest#setCharacterEncoding()GET リクエストには影響せず、POST リクエストにのみ影響します。

以下も参照してください。

于 2012-02-15T00:08:40.043 に答える