【问题标题】:Process output after template engine in Spring MVCSpring MVC中模板引擎后的流程输出
【发布时间】:2014-05-15 08:51:39
【问题描述】:

我目前正在使用带有 Freemarker 的 Spring MVC 作为视图技术(模板引擎)。但是,包含多个模板文件会导致输出不再被很好地格式化。我当前的 HTML 输出可能如下所示:

<!-- Newlines before Start-tag -->

<html>
  <head>
    <title>Title</title>
  </head>
<body>
<!-- Intendation is resetted -->
<div id="page" class="container">
  <div class="row">
<div id="content" class="col-xs-12">
  <div class="row">
     ..</div>
 <!-- Muliple close tags on same line -->
 </div></div>
</div>
</body>
</html>

为了便于可视化调试,我想使用一些 HTML/XML 格式化程序手动格式化输出。但是在 Spring 中,在将模型传递给视图技术(在我的情况下为 Freemarker)后,我无法控制输出。我该怎么办?

我的猜测是创建一个 servlet 过滤器并将其注册为在模板执行后执行。我将如何在纯 Spring Java Config 中执行此操作?

【问题讨论】:

标签: java spring spring-mvc servlets servlet-filters


【解决方案1】:

您可以创建一个自定义视图类来扩展 FreeMarkerView 并在呈现视图后应用自定义格式,而不是使用过滤器。好处是它只适用于从 freemarker 视图创建的响应(我认为这是您想要的)。

public class CustomFreeMarkerView extends FreeMarkerView {

    @Override
    protected void processTemplate(Template template, SimpleHash model, HttpServletResponse response) throws IOException, TemplateException {
        StringWriter writer = new StringWriter();
        template.process(model, writer);
        String formattedTemplate = formatTemplate(writer.toString());
        response.getWriter().write(formattedTemplate);

    }

    private String formatTemplate(String renderedTemplate) {
        //do custom formatting of the renderedTemplate here
        return renderedTemplate;
    }
}

formatTemplate 中应用格式后,您可以在视图解析器中连接自定义视图:

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" autowire="no">
    <property name="viewClass" value="com.example.CustomFreeMarkerView" />
    ...
</bean>

在 JavaConfig 中它看起来像这样:

@Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
    FreeMarkerViewResolver fvr = new FreeMarkerViewResolver();
    fvr.setViewClass(CusotmFreeMarkerView.class);
    ...
}

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2016-05-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多