2017-03-29 3 views
0

最初は、プロジェクトはtomcat(UTF-8)とjboss eap 6でうまく動作し、ページエンコーディングもUTF-8です。 encodeURIComponentでの使用や、それがうまく機能シリアライズ時に第二に、JBossの設定がjbossへのajaxポストencodeURIComponentなしの7つの乱雑なコード

<servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only" default-encoding="UTF-8">

を追加する第三に、しかし、それはシリアライズ使用しているときに失敗し、いくつかのパラメータを追加しているようでは、次のとおりです。

var params = $("#form_viewOrUpdateSchedule").serialize(); 
 
    params += "&recordId=" + recordId; 
 
    params += "&custName=" + custName; 
 
    params += "&startTime=" + startTime; 
 
    params += "&content=" + content; 
 
    params += "&endTime=" + endTime; 
 
    params += "&scheduleDate=" + getScheduleDate(); 
 
    bodymask(); 
 
    $.ajax({ 
 
    url: url, 
 
    type: "POST", 
 
    data: params, 
 
    datatype: "JSON", 
 
\t contentType : "application/x-www-form-urlencoded; charset=utf-8", 
 
    success: function(data) {

第4に、serializeなどを使用するとうまくいきます。

var recordId = $("#schedule_list_id").val(); 
 
    var custName = $("#schedule_list_custName option:selected").val(); 
 
    var startTime = $("#schedule_list_startTime").val(); 
 
    var endTime = $("#schedule_list_endTime").val(); 
 
    var content = $("#schedule_list_content").val(); 
 
    var startIndex = $("#schedule_list_startTime").get(0).selectedIndex; 
 
    var endIndex = $("#schedule_list_endTime").get(0).selectedIndex; 
 
    if (startIndex > endIndex) { 
 
    alertInfo("提示", "结束时间不能早于开始时间"); 
 
    return; 
 
    } 
 
    var params = {} 
 
    params.recordId = recordId; 
 
    params.custName = custName; 
 
    params.startTime = startTime; 
 
    params.content = content; 
 
    params.endTime = endTime; 
 
    params.scheduleDate = getScheduleDate(); 
 
    $.ajax({ 
 
    url: url, 
 
    type: "POST", 
 
    data: params,

第五には、JBoss EAP 7は、(実際WildFlyに名前を変更、バージョンが10である)の代わりにTomcatの引きに基づいています。

Sixly、同様の質問がhttps://developer.jboss.org/thread/221662に頼まれ、デフォルトのキャラクターエンコーディングを設定することができなかった問題がhttps://javaarm.com/faces/display.xhtml;jsessionid=bPtpE2lS35rYKscI0laAyYbp?tid=3341&page=1&print=true

最後に述べたように、WildFly 8.0で解決され、私はそれが上記とTomcatの中でうまく機能する理由だろう"第三に" jsと作業はjboss eap 7で失敗しましたか?私はjsコードを変更しない場合、どのように問題を解決するには?例えば

+0

このプロジェクトでは、文字またはエンコーディングを "UTF-8"に設定するために文字フィルタを使用しました –

+0

https://developer.jboss.org/message/970246#970246のようになりました。その野鳥がサーブレットの代わりにjax-rsを使用していたので、私のエンコーディング設定は利用できませんでした。もしそうなら、なぜ私はencodeURIComponentを使うとうまくいくのですか?それは意味をなさない。 –

+0

それから、質問は、エンコードURIやjsオブジェクト以外の投稿がjsオブジェクトでない場合、tomcat couldとjboss(wildFly)ができないことです。だから、なぜ、どのようにwildFlyでそれを解決するには? –

答えて

0

Tomcatではうまく機能していたが、WildFlyでソースコードを調べると失敗した理由を知りました。それはバイト[からポストコンテンツを変換するためにnew String (byte[] bytes, int offset, int length, Charset charset)を使用していますorg.apache.tomcat.util.http.Parameters.processParameters(byte bytes[], int start, int len,Charset charset)

buffer.clear(); 
int c = channel.read(buffer); 
if (c > 0) { 
     buffer.flip(); 
     while (buffer.hasRemaining()) { 
     byte n = buffer.get(); 
     builder.append((char) n);//the problem occurred here,[a][b][c] would be changed to [0][a][0][b][0][c] 

Tomcatのでは、あなたが見ることができるの詳細を:

WildFlyでは、あなたはそれがこのように扱わ、io.undertow.server.handlers.form.FormEncodedDataDefinition.FormEncodedDataParser.doParse(final StreamSourceChannel channel)で詳細を確認することができます]をStringに変換します。

この場合、デフォルトのエンコーディングはutf-8で、js URIComponentEncodingを使用しないとtomcatはうまく動作します。

1

あなたはHTTPリスナー(および他の)上のURIエンコーディングを設定する必要が

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" url-charset="UTF-8"/> 

またはCLI:他のすべてのリスナーのための

/subsystem=undertow/server=default:server/http-listener=default:write-attribute(name="uri-charset", value="UTF-8") 

と同様ます使用している可能性があります。

org.apache.catalina。*という名前のシステムプロパティは、tomcat関連のプロパティです。 WildFly 8+とEAP7 + Webサーバーは使用されており、Tomcatをベースにしたjbosswebはなくなっています。 このように、このプロパティはまったく影響しません。

+0

あなたが言及した行を追加しましたが、私の場合は動作しません。 –

関連する問題