当前位置: 首页 > 知识库问答 >
问题:

如何在Spring mvc中使用FreeMarker宏

左丘烨烁
2023-03-14

您好,我正在从事一个spring mvc项目,我想使用FreeMarker作为我的模板引擎,我在使用宏时遇到了问题,我想创建一个母版页或布局(页脚、页眉和菜单),我可以在其他页面中使用,到目前为止,我正在做一个简单的示例,说明如何操作,但我无法让它工作,我在宏中输入的内容没有显示我的FreeMarker版本是2.3.21。

以下是我的freemarker java类配置:

 @Bean
 public FreeMarkerConfigurer freemarkerConfig() {
     FreeMarkerConfigurer freeMarkerConfigurer  =  new FreeMarkerConfigurer();
     freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/");
     freeMarkerConfigurer.setDefaultEncoding("UTF-8");
     return freeMarkerConfigurer;
 }
 @Bean
 public FreeMarkerViewResolver viewResolver() {
     FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
     viewResolver.setPrefix("");
     viewResolver.setSuffix(".html");
     viewResolver.setCache(false);   //Set to true during production
     viewResolver.setContentType("text/html;charset=UTF-8");
     return viewResolver;
 }

我正在将宏保存为。类似于myMacro的html页面。html

这里是myMacro.html文件

<#macro myMasterPage title="defaultTitle">
  <html>
  <body style="width:100%;height:100%">
      print me
      <table border="1" cellspacing="0" cellpadding="0" style="width:100%;height:100%">
        <tr>
          <td colspan="2">
            <#include "Header.html"/>
          </td>
        </tr>
        <tr>
          <td>
            <#include "Menu.html"/>
          </td>
          <td>
            <#nested/>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <#include "Footer.html"/>
          </td>
        </tr>
      </table>
    </body>
  </html>
</#macro>

这是我调用宏的页面

myPage.html

[#import "/WEB-INF/views/myMacro.html" as layout /] [@layout.myMasterPage title="My test page"] ...content goes here... [/@layout.myMasterPage ]

我的页脚。html

<div><h1>this is the footer</h1></di

我的header.html

<div><h1>this is the header</h1></div>

我的菜单。html

    <div>
  <h1>
     <ul>  
       <li>Menu item 1</li>  
       <li>Menu item 2</li>  
       <li>Menu item 3</li>  
       <li>Menu item 4</li>  
       <li>Menu item 5</li>  
       <li>Menu item 6</li>
     </ul>
  </h1>
</div>  

这是我访问myP时得到的输出age.html

[#import "/WEB-INF/views/ApruebaFreeMarker.html" as layout /] [@layout.myMasterPage title="My test page"] ...content goes here... [/@layout.myMasterPage ]

这是我的控制器

@RequestMapping(value = "/myPage", method = RequestMethod.GET)
    public String myPage(Model model) {
        logger.info("PAge with Macro inside");



        return "myPage";
    }

编辑:当我像这样导入布局时,我使用了和替代语法:

[#import "/WEB-INF/views/ApruebaFreeMarker.html" as layout /] [@layout.myMasterPage title="My test page"] ...content goes here... [/@layout.myMasterPage ]

但我这样编辑,效果很好

<#import "myMacro.html" as layout>
<@layout.myLayout>
  <div><h1>Hello Dude</h1></div>
</@layout.myLayout>

但是我有另一个问题,我是freemarker的新手,我不知道如果我将它们保存为. html或. ftl有什么区别

共有1个答案

怀飞掣
2023-03-14

您正在使用所谓的“可选(方括号)语法”。请看这里:http://freemarker.org/docs/dgui_misc_alternativesyntax.html最有可能的解决方法是将方括号替换为尖括号,或者(对此不确定)在模板的开头使用([#ftl],如文档中所述)。

 类似资料:
  • 我正在通过在线示例学习使用FreeMarker的SpringMVC。我遇到了这个错误,但是我不知道我的getFreemarkerConfig()方法有什么问题,一整天我都在试图修复它,但是没有成功。

  • 作为基础了解,在web应用程序范畴内使用 FreeMarker 和其它并没有什么不同; FreeMarker将它的输出写入传递给 Template.process 方法的 Writer 对象,它不关心 Writer 将输出写入控制台,文件或是 HttpServletResponse 的输出流。 FreeMarker 并不知道什么是servlet和web;它仅仅是使用模板文件来合并Java对象, 之

  • 我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。

  • 我试图在我的应用程序中实现jpa 发展能力 所以,我的DataConfig看起来像这样: 但是,当我尝试启动应用程序时,会出现错误消息。制造战争- 已连接到服务器[2018-09-26 09:54:32631]工件未命名:正在部署工件,请稍候。。。2018年9月26日09:54:34.460警告[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。公猫dbcp。dbcp2。基本资源工厂。g

  • 我有一个属性文件,例如*。 我想在freemarker模板中使用这个键值。比如说

  • 我试图在我的FreeMarker模板中调用一个Java方法,该模板使用公共静态Java变量作为其参数之一。例如,如果FreeMarker代码在