我编写了自己的实现 TemplateExceptionHandler 的类。该类将在响应中设置错误状态,然后在我的 js 中,ajax 调用将输入错误:部分并显示一条消息。
所以在我的 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字符串。例如,如果在我的 freemarker 中我有
<div class="testDiv">${unexistingVariable}</div>
当我执行
out = response.getWriter();
out.print(message);
在我的回复中,我会发现
<div class="testDiv">my error msg
并且用户将在错误消息中看到这个 div,因为在我的 .js 中我有
error : function(jqXHR, textStatus, errorThrown) {
...
contentDialog.html(jqXHR.responseText);
你能告诉我为什么我的 response.getWriter() 已经填充了在异常发生之前处理的代码,我如何实例化一个干净的响应对象,里面只有我的错误消息?
谢谢