gpt4 book ai didi

java - Freemarker 中的错误处理

转载 作者:行者123 更新时间:2023-12-01 14:26:04 32 4
gpt4 key购买 nike

我编写了自己的类来实现 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,因为在我的 .js 中我有

    error : function(jqXHR, textStatus, errorThrown) {
...
contentDialog.html(jqXHR.responseText);

你能告诉我为什么我的response.getWriter()已经填充了异常发生之前处理的代码以及如何实例化一个干净的响应对象,其中只包含我的错误消息?

谢谢

最佳答案

如果您想防止半成品页面被发送回客户端,则必须使用全页缓冲。这独立于 FreeMarker 错误处理,甚至独立于 FreeMarker(它只是盲目地写入您传递给 Template.process 的任何 Writer)。

此外,您确定需要一个 FreeMarker 模板异常处理程序吗?当模板中发生错误时,Template.process 会抛出异常,因此您可以像处理 FreeMarker 外部发生的任何其他异常一样处理该异常。 TemplateExceptionHandler-s 的主要目的是在输出中包含错误信息(例如用于调试),或抑制某些错误。因此,如果您不想要此类内容,只需在 FreeMarker 外部捕获异常(然后为了清楚起见,您可以使用 TemplateExceptionHandler.RETHROW_HANDLER)。

关于java - Freemarker 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166303/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com