Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC中模板引擎之后的处理输出_Java_Spring_Spring Mvc_Servlets_Servlet Filters - Fatal编程技术网

Java Spring MVC中模板引擎之后的处理输出

Java Spring MVC中模板引擎之后的处理输出,java,spring,spring-mvc,servlets,servlet-filters,Java,Spring,Spring Mvc,Servlets,Servlet Filters,我目前正在使用SpringMVC和Freemarker作为一种视图技术(模板引擎)。但是,包含多个模板文件会导致输出格式不再正确。我当前的HTML输出可能如下所示: <!-- Newlines before Start-tag --> <html> <head> <title>Title</title> </head> <body> <!-- Intendation is resetted

我目前正在使用SpringMVC和Freemarker作为一种视图技术(模板引擎)。但是,包含多个模板文件会导致输出格式不再正确。我当前的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>
@Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
    FreeMarkerViewResolver fvr = new FreeMarkerViewResolver();
    fvr.setViewClass(CusotmFreeMarkerView.class);
    ...
}

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


我的猜测是创建一个servlet过滤器,并将其注册为在模板执行后执行。如何在纯Spring Java配置中实现这一点?

您可以创建一个自定义视图类,该类扩展FreeMarkerView,并在视图呈现后应用自定义格式。好处是,它只适用于从freemarker视图创建的响应(我假设这是您想要的)

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

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

在web应用程序中注册一个
DelegatingFilterProxy
,并将其委托给
Filter
bean。如何仅使用Java配置来实现这一点?另一个问题是我看不到Freemarker在哪里注册它的过滤器。如果有帮助,这里有相关的代码:在
getSerlvetFilters
方法中注册DelegatingFilterProxy,并在创建自定义过滤器的too上下文中放置一个
@Bean
方法。
@Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
    FreeMarkerViewResolver fvr = new FreeMarkerViewResolver();
    fvr.setViewClass(CusotmFreeMarkerView.class);
    ...
}