广州睿东网络科技有限公司是国内最专业的香港空间,云主机,香港VPS,香港服务器租用提供商,专注为国内站长提供高速且稳定的香港空间,云主机,香港VPS,香港服务器租用,欢迎您的选购!
当前位置:首页 -> seo模板 -> h5模板

springboot系列(一)整合Freemark模板(详尽版)

云服务器 34℃ 1884评论
张亚东 码一码

准备把我网站上的文章,整理一下都迁移到微信上来。先弄springboot的吧

本文算作springboot系列的第一篇文章吧,我会尽可能详细的介绍每篇文章的知识点,希望能够帮助到所有看到这篇文章的人。

另外,如果本文内容有误,还请朋友留言提醒,感激不尽,叩谢。

本文知识点:

  1. springboot如何集成freemarker模板引擎

  2. 详细版:常用的freemarker语法

  3. 特别篇:如何在springboot中通过freemarker生成静态html(纯静态化)

springboot如何集成freemarker模板引擎

添加依赖

  1. <dependency>

  2.   <groupId>org.springframework.boot</groupId>

  3.   <artifactId>spring-boot-starter-web</artifactId>

  4. </dependency>

  5. <dependency>

  6.   <groupId>org.springframework.boot</groupId>

  7.   <artifactId>spring-boot-starter-freemarker</artifactId>

  8. </dependency>

配置属性文件

  1. # 是否允许HttpServletRequest属性覆盖(隐藏)控制器生成的同名模型属性。

  2. spring.freemarker.allow-request-override=false

  3. # 是否允许HttpSession属性覆盖(隐藏)控制器生成的同名模型属性。

  4. spring.freemarker.allow-session-override=false

  5. # 是否启用模板缓存。

  6. spring.freemarker.cache=false

  7. # 模板编码。

  8. spring.freemarker.charset=UTF-8

  9. # 是否检查模板位置是否存在。

  10. spring.freemarker.check-template-location=true

  11. # Content-Type value.

  12. spring.freemarker.content-type=text/html

  13. # 是否启用freemarker

  14. spring.freemarker.enabled=true

  15. # 设定所有request的属性在merge到模板的时候,是否要都添加到model中.

  16. spring.freemarker.expose-request-attributes=false

  17. # 是否在merge模板的时候,将HttpSession属性都添加到model中

  18. spring.freemarker.expose-session-attributes=false

  19. # 设定是否以springMacroRequestContext的形式暴露RequestContext给Spring’s macro library使用

  20. spring.freemarker.expose-spring-macro-helpers=true

  21. # 是否优先从文件系统加载template,以支持热加载,默认为true

  22. spring.freemarker.prefer-file-system-access=true

  23. # 设定模板的后缀.

  24. spring.freemarker.suffix=.ftl

  25. # 设定模板的加载路径,多个以逗号分隔,默认:

  26. spring.freemarker.template-loader-path=classpath:/templates/

  27. # 设定FreeMarker keys.

  28. spring.freemarker.settings.template_update_delay=0

  29. spring.freemarker.settings.default_encoding=UTF-8

  30. spring.freemarker.settings.classic_compatible=true

编写Controller

  1. @Controller

  2. public class FreemarkController {

  3.    @RequestMapping("/")

  4.    public String index(Model model) {

  5.        return "index";

  6.    }

  7. }

页面

  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.    <title>SpringBoot + Freemarker</title>

  5.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  6. </head>

  7. <body>

  8.    <h1>Hello boy,</h1><br>

  9.    <p>当前时间:${.now?string("yyyy-MM-dd HH:mm:ss.sss")}</p>

  10. </body>

  11. </html>

常用的freemarker语法

下面详细介绍在ftl模板中如何使用列表、map、字符串、数字、日期、switch以及macro宏指令等语法。

修改下controller,传递一些需要处理的参数

  1. @RequestMapping("/")

  2. public String index(Model model) {

  3.    Map map = new LinkedHashMap<>();

  4.    for (int i = 0; i < 5; i++) {

  5.        map.put("key" + i, "value" + i);

  6.    }

  7.    model.addAttribute("list", Arrays.asList("string1", "string2", "string3", "string4", "string5", "string6"));

  8.    model.addAttribute("map", map);

  9.    model.addAttribute("name", "   htTps://wWw.zHyD.mE   ");

  10.    model.addAttribute("htmlText", "<span style="color: red;font-size: 16px;">html内容</span>");

  11.    model.addAttribute("num", 123.012);

  12.    model.addAttribute("null", null);

  13.    model.addAttribute("dateObj", new Date());

  14.    model.addAttribute("bol", true);

  15.    return "index";

  16. }

重写index.ftl

  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.    <title>Freemarker 语法大全</title>

  5.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

  6.    <style>

  7.        html {

  8.            font-size: 14px;

  9.            font-weight: 400;

  10.        }

  11.        .exp {

  12.            font-size: 12px;

  13.            color: lightgray;

  14.        }

  15.    </style>

  16. </head>

  17. <body>

  18. <p>当前时间:${.now?string("yyyy-MM-dd HH:mm:ss.sss")}</p>

  19. <dl>

  20.    <dt>list长度:<span class="exp">${list?size}</span></dt>

  21.    <dt>列表</dt>

  22.        <#list list as item>

  23.            <dd>${item }, 索引:${item_index },hasNext:${item_has_next}</dd>

  24.        </#list>

  25.    <dt>数字遍历</dt>

  26.        <#list 1..3 as item>

  27.            <dd>数字${item}</dd>

  28.        </#list>

  29.    <dt>map</dt>

  30.        <#list map?keys as key>

  31.            <dd>${map[key]}, 索引:${key_index },hasNext:${key_has_next}</dd>

  32.        </#list>

  33. </dl>

  34. <dl>

  35.    <dt>字符串</dt>

  36.    <dd>普通字符串:<span class="exp">${name}</span></dd>

  37.    <dd>非html编码:<span class="exp">${htmlText}</span></dd>

  38.    <dd>html编码:<span class="exp">${htmlText?html}</span></dd>

  39.    <dd>首字母大写:<span class="exp">${name?cap_first}</span></dd>

  40.    <dd>首字母小写:<span class="exp">${name?uncap_first}</span></dd>

  41.    <dd>全小写:<span class="exp">${name?lower_case}</span></dd>

  42.    <dd>全大写:<span class="exp">${name?upper_case}</span></dd>

  43.    <dd>去除首位空格:<span class="exp">${name?trim}</span></dd>

  44.    <dd>空字符串:<span class="exp">${null?if_exists}</span></dd>

  45.    <dd>是否包含某个字符串:<span class="exp">${name?contains("wWw")?string}</span></dd>

  46.    <dd>默认值:<span class="exp">${null?default("空值默认")}</span></dd>

  47.    <dd>“${name}”字符串长度:<span class="exp">${name?length}</span></dd>

  48.    <dd>定义字符串:<span class="exp">str=码一码<#assign str="码一码"/></span></dd>

  49.    <dd>字符串拼接(1):<span class="exp">${"字符串拼接 + " + str}</span></dd>

  50.    <dd>字符串拼接(2):<span class="exp">${"字符串拼接 + ${str}"}</span></dd>

  51.    <dd>字符串截取单个字符(1):<span class="exp">${str[1]}</span></dd>

  52.    <dd>字符串截取(2):<span class="exp">${str?substring(1)}</span></dd>

  53.    <dd>字符串截取(3):<span class="exp">${str?substring(1,2)}</span></dd>

  54.    <dd>indexOf:<span class="exp">${str?index_of("一")}</span></dd>

  55.    <dd>split分割字符串:<span class="exp">

  56.    <#list "a|b|c"?split("|") as item>

  57.        ${item}

  58.    </#list>

  59.    </span></dd>

  60.    <dd>if...elseif...else:<span class="exp">

  61.            <#if null == >

  62.                匹配if显示

  63.            <#elseif null == 1>

  64.                匹配elseif显示

  65.            <#else>

  66.                匹配else显示

  67.            </#if></span>

  68.    </dd>

  69. </dl>

  70. <dl>

  71.    <dt>switch</dt>

  72.    <dd>

  73.        <#switch str>

  74.            <#case "你好">

  75.                匹配“你好”

  76.                <#break >

  77.            <#case "码一码">

  78.                匹配“码一码”

  79.                <#break >

  80.            <#default>

  81.                默认匹配

  82.        </#switch>

  83.    </dd>

  84. </dl>

  85. <dl>

  86.    <dt>数字</dt>

  87.    <dd>普通数字:<span class="exp">${num}</span></dd>

  88.    <dd>数字类型:<span class="exp">${num?string.number}</span></dd>

  89.    <dd>货币类型:<span class="exp">${num?string.currency}</span></dd>

  90.    <dd>百分比类型:<span class="exp">${num?string.percent}</span></dd>

  91.    <dd>格式化数字:<span class="exp">${num?string("#.###")}</span></dd>

  92.    <dd>取数字的整数部分:<span class="exp">${num?int}</span></dd>

  93. </dl>

  94. <dl>

  95.    <dt>运算符</dt>

  96.    <dd>不等于:!= <span class="exp">例如:${(1 != 2)?string(1 != 2, 1 == 2)}</span></dd>

  97.    <dd>等于:== <span class="exp">例如:${(1 == 1)?string(1 == 1, 1 != 1)}</span></dd>

  98.    <dd>大于(1):> <span

  99.            class="exp">例如:${(2 > 1)?string(2 > 1, 2 < 1)}。<strong>注:使用> 时必须加括号,否则可能会被当成普通的标签闭合符号而引起报错</strong></span>

  100.    </dd>

  101.    <dd>大于(2):gt <span class="exp">例如:${(2 gt 1)?string(2 gt 1, 2 lte 1)}</span></dd>

  102.    <dd>大于等于:gte <span class="exp">例如:${(2 gte 2)?string(2 gte 2, 2 lt 2)}</span></dd>

  103.    <dd>小于(1):< <span

  104.            class="exp">例如:${(1 < 2)?string(1 < 2, 1 > 2)}。<strong>注:使用< 时必须加括号,否则可能会被当成普通的标签闭合符号而引起报错</strong></span>

  105.    </dd>

  106.    <dd>小于(2):lt <span class="exp">例如:${(1 lt 2)?string(1 lt 2, 1 gte 2)}</span></dd>

  107.    <dd>小于等于:lte <span class="exp">例如:${(2 lte 2)?string(2 lte 2, 2 gt 2)}</span></dd>

  108. </dl>

  109. <dl>

  110.    <dt>boolean</dt>

  111.    <dd>普通boolean输出:<span class="exp">${bol}</span></dd>

  112.    <dd>boolean判断输出:<span class="exp">${bol?string(true的时候显示,false的时候显示)}</span></dd>

  113. </dl>

  114. <dl>

  115.    <dt>日期</dt>

  116.    <dd>${dateObj?date}</dd>

  117.    <dd>${dateObj?time}</dd>

  118.    <dd>${dateObj?string("yyyy-MM-dd HH:mm:ss.SSS")}</dd>

  119. </dl>

  120. <dl>

  121.    <dt>import</dt>

  122.    <dd>

  123.        <#import "import.ftl" as importObj>

  124.        <p>${importObj.importStr}</p>

  125.        <p>${importObj.importStr1}</p>

  126.    </dd>

  127. </dl>

  128. <dl>

  129.    <dt>macro宏模板</dt>

  130.    <dd>

  131.        <#macro listMacro title items>

  132.            <p>${title?cap_first}:

  133.            <ul>

  134.               <#list items as item>

  135.                   <li>${item?cap_first}</li>

  136.               </#list>

  137.            </ul>

  138.            <#nested >

  139.        </#macro>

  140.    </dd>

  141.    <dd>

  142.        <@listMacro items=["item1", "item2", "item3"] title="Items">

  143.            nested标签表示可以插入自定义的内容

  144.        </@listMacro>

  145.    </dd>

  146. </dl>

  147. 喜欢 (1884)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: