なmyfaces ExtensionsFilter変更ページエンコーディング?
質問
昨日の話を使い始めのホ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図書館に関連するエンコード形態のフィルターによるもの cflow
の call
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" %>