質問

昨日の話を使い始めのホExtensionsFilter部品imっjsfす。いすべてのjavascriptのアラートが表示されない特殊文字(ç,ã,ó座で表示すように#231ます。私は削除ExtensionsFilterからweb.xml ファイル、javascriptを表示allright.誰もがこの問題。
よろしくお願いします。

編集:ることができたこの問題を解決する創造のフィルターの前にextensionFilter、この新しいフィルターは、要求の文字セットをutf-8です。しかし、これは醜いソリューションでは、より良い解決してbalusC言うくすべてのインラインです。
あるのは助かります!

役に立ちましたか?

解決

別の複数のアイデア:

  • 追加のフィルタを呼びかけ setContentType または setCharacterEncoding やる前にすべてのその他のフィルター
  • プロパティを設定 -Dfile.encoding
  • rebindのjavascript window.alert そのエスケープ文字

このように作業ができ、とても醜いhack.こうすることも非常に限られ、かない場合はjavascriptを設定しその他のテキスト、などコンテンツの div.

var hack = window.alert;
window.alert = function( text ) {
    hack( text + ' was converted' );
};
alert('hello');

更新:

ここでは、シーケンスが容疑者:

1) ExtensionsFilter を遮断する要求

2)ExtensionsFilterを含む

  154   // only parse HTML responses
  155   if (extendedResponse.getContentType() != null && isValidContentType(extendedResponse.getContentType()))
  156   {
        ...
  172        // writes the response
  173        addResource.writeResponse(extendedRequest, servletResponse);
  174    }
  175   else
  176   {
  178        byte[] responseArray = extendedResponse.getBytes();
  180        if(responseArray.length > 0)
  181       {
  182       // When not filtering due to not valid content-type, deliver the byte-array instead of a charset-converted string.
  183       // Otherwise a binary stream gets corrupted.
  184       servletResponse.getOutputStream().write(responseArray);
  185     }

3) DefaultAddResource 用途 HtmlResponseWriterImpl を利用し UnicodeEncoder.

4)"の基本ラテン文字"にしてエンコードされます。

結論

  • 設定した場合コンテンツ型のものが無効にExtensionsFilterデフォルトの"else"の支店となエンコードします。でも、そのExtensionsFilterであろう。
  • 変更setCharacterEncodingは効果がなされておらず、 file.encoding
  • を追加フィルターを包の対応とに戻すには &#xx; 仕事ができるものは非常に汚い.

ないその他のアイデアに、現在のものにも興味を持っている答えのもと、より衝突エンコーディングに行った迷惑なレベルまでさまざまです。


更新2:

きを与えてみて AspectJ 変更の一部のMyFaces図書館に関連するエンコード形態のフィルターによるもの cflowcall pointcut pickingsないことから、この遮断時のエンコーディングからのフィルターこの定義を作成しその他の干渉の要求を処理するためにも考慮に addResource.writeResponse 制限されpointcut.

public aspect SkipEncoding {  
    pointcut encodingInExtFilter() : 
        cflow( * org.apache.myfaces.webapp.filter. ExtensionsFilter.doFilter(..) ) && 
        call ( String UnicodeEncoder.encode( String, bool, bool ));   
    around( String s, bool b1, bool b2 ) : encodingInExtFilter
    {
        return s; // skip encoding
    }
}

他のヒント

これは、XMLエンティティをエスケープします。それは、しかし、また、JSP / XHTMLファイル内のJavaScriptコードをインラインで奉仕する貧しい練習考えられています。あなたは<script src="path/to/file.js"></script>で指定します(少なくとも、そのURLは、フィルタによってカバーされるべきではない)、この特定の問題が消えるはず独自のファイルでそれを外部ます。

ところで、あなたは、JSPページでは、これらのいずれかを持っています。

<?xml version="1.0" encoding="utf-8"?>

または

<%@ page pageEncoding="utf-8" %>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top