TemplateExceptionHandler を実装する独自のクラスを作成しました。そのクラスは応答でエラーステータスを設定し、js で ajax 呼び出しが error: 部分に入り、メッセージを表示します。
したがって、私の TemplateExceptionHandler には次のものがあります。
String message = "my error msg";
HttpServletResponse response = ServletActionContext.getResponse();
// set the message in response
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
PrintWriter out = null;
try {
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
out.print(message);
} catch (IOException ioe) {
LOGGER.error("IOException in printMessage : " + ioe.getMessage(), ioe);
} finally {
if (out != null) {
out.flush();
out.close();
}
}
私がそうするときを除いて、すべてがうまくいっています
response.getWriter();
例外が発生した freemarker の部分によっては、既に html 文字列が存在します。たとえば、私のフリーマーカーで私が持っていた場合
<div class="testDiv">${unexistingVariable}</div>
私が実行するとき
out = response.getWriter();
out.print(message);
私の応答で私は見つけます
<div class="testDiv">my error msg
そして、ユーザーは、エラー メッセージにこの div が表示されます。
error : function(jqXHR, textStatus, errorThrown) {
...
contentDialog.html(jqXHR.responseText);
私の response.getWriter() が、例外が発生するまで処理されたコードで既に満たされている理由と、エラー メッセージのみを含むクリーンな応答オブジェクトをインスタンス化する方法を教えてください。
ありがとうございました