JPAのサーブレット文字エンコーディング問題
-
26-12-2019 - |
質問
OK、私は 3 7時間グーグルとテストとテストを費やして、あきらめなければならない、私は助けを求めなければなりません。
私は形式で単純なJSPを作成しました:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<form action="save-user" method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
<input type="submit" value="Save">
</form>
.
とサーブレット:
String name = request.getParameter("name");
String email = request.getParameter("email");
.
私はレオクの代わりにレオングを受けます。 Wildfly 8.0RC1、Windows 8チェコ、Firefox。
私がすでに試したこと:
- request.etpharacterencoding( "UTF-8");読む前に パラメータ
- Request.etchAracterencoding( "UTF-8");
- jvmプロパティ-dfile.encoding= UTF-8
- 戦争から標準JEEスタックジャーを削除
- 戦争包装を修正
- WebおよびEJBモジュールへの分割プロジェクト
JPAエンティティ/ DAOが展開されている場合、DIACRITICSはマングルされています。サーブレットからエンティティをコメントアウトして、WARからJPAエンティティを削除した場合(現在Web-INF / LIBからOAuthLogineJB.jarを削除)、正しいエンコーディングを受け取ります。このEJBを追加した場合は、もう一度失敗します。それはJBoss / Wildflyのバグですか?
私は完全なソースを提供することができます: https://ドライブ。 google.com/file/d/0b-adlc5kthqdwtdyoewxouptveu/edit ?usp= sharing それは実行する準備ができています、あなたはプレフィルドのようにチェコの文字を入力する必要さえありません。ありがとう
解決
Wildfly DevのメーリングリストからのMARKOはこの欠陥に指していました: https://issues.jboss。org / browse / cdi-411 とこの回避策: http://weld.cdi-spec.org/documentation/3
web.xmlを変更したとき、それは機能し始めました:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>cz.literak.demo.oauth.servlets.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CDI Conversation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
. 他のヒント
要求InputStreamから最初に読み込まれる前に、request.setCharacterEncoding("UTF-8")
を呼び出す必要があります。サーブレットにエンコードを設定する前に、パラメータをフィルタで読み取ることができます。OAuthLoginEJB.jar
または他の依存関係にはいくつかのフィルタがあります。これは最初にパラメータを読みますか?通常、これはデバッグのためのパラメータです。