java - Freemarker 中的错误处理

标签 java jquery struts2 jboss freemarker

我编写了自己的类来实现 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/

相关文章:

java - 使用mockito在JUnit中模拟ReentrantReadWriteLock

javascript - 如何覆盖CSS动画

java - 避免重复提交Struts 2 jsp页面

spring - 自定义错误页面 + spring security 3 + hasPermission

javascript - Java-将javascript连接到servlet

java - cygwin bash : java: command not found

jquery - data-i18n 不显示符号

php - JQuery - 上传裁剪并保存到 MySQL 数据库

java - 如何使 javascript 生成的 HTML 可被谷歌爬虫索引?

java - slf4j/logback - 某些线程的不同日志级别