博客信息

springboot之freemarker模板

发布时间:『 2019-02-15 09:04』  博客类别:SpringBoot  阅读(910)


导入pom依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-freemarker</artifactId>
   </dependency>

<!--可以不加,但是做项目的时候可能会用-->
 <resources>
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--freemarker模板也读取需要注释标红地方-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!--<include>*.properties</include>-->
                    <!--<include>*.xml</include>-->
                    <!--<include>*.yml</include>-->
                </includes>
            </resource>
        </resources>


application.yml文件的默认配置

spring:
  thymeleaf:
    cache: false
  freemarker:
    # 设置模板后缀名
    suffix: .ftl
    # 设置文档类型
    content-type: text/html
    # 设置页面编码格式
    charset: UTF-8
    # 设置页面缓存
    cache: false
    # 设置ftl文件路径,默认是/templates,为演示效果添加role
    template-loader-path: classpath:/templates/role
  mvc:
    static-path-pattern: /static/**


list.ftl

<h2>取值</h2>
<h3>提供默认值</h3>
welcome 【${name!'未知'}】 to freemarker!

<h3>exists用在逻辑判断</h3>
<#if name?exists>
    ${name}
</#if>

<h2>条件</h2>
<#if sex=='girl'>
		女
<#elseif sex=='boy'>
		男
<#else>
		保密
</#if>

<h2>循环</h2>
<table border="1px" width="600px">
    <thead>
    <tr>
        <td>ID</td>
        <td>角色名</td>
        <td>描述</td>
    </tr>
    </thead>
    <tbody>
    <#list roles as role>
    <tr>
        <td>${role.rid}</td>
        <td>${role.roleName}</td>
        <td>${role.desc}</td>
    </tr>
    </#list>
    </tbody>
</table>

<h2>include</h2>
<#include 'foot.ftl'>

<h2>局部变量(assign)/全局变量(global)</h2>
 <#assign ctx1>
     ${springMacroRequestContext.contextPath}
 </#assign>

<#global ctx2>
    ${springMacroRequestContext.contextPath}
</#global>

${ctx1}和${ctx2}


foot.ftl

底部页面
<a href="login.ftl">返回登录1</a>
<a href="${ctx}/toLogin">返回登录2</a>


common.ftl

<#assign ctx>
    ${springMacroRequestContext.contextPath}
</#assign>
<base href="${ctx}/">


login.ftl

欢迎来到登录界面


相关controler层的Java代码

@RequestMapping("/role/list")
    public ModelAndView roleList(){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("/list");

        mav.addObject("name",null);
        mav.addObject("sex","gay");
        List list = new ArrayList();
        list.add(new Role(1,"老师","教书育人"));
        list.add(new Role(2,"学生","知识改变命运"));
        mav.addObject("roles",list);

        return mav;
    }

    @RequestMapping("toLogin")
    public String toLogin(){
        return "login";
    }


浏览器显示结果

小李飞刀_SpringBoot小李飞刀_SpringBoot


注意点:

1、application.yml中可以配置模板存放位置的根路径、以及静态资源文件存放位置的根路径

2、${springMacroRequestContext.contextPath}:SpringBoot中获取项目名

3、不推荐使用全局变量。即便它们属于不同的命名空间, 全局变量也被所有模板共享,因为它们是被 import进来的。

4、freemarker模板也可以像jsp那样设置根路径

<#include 'common.ftl'>
    <script src="js/xxx.js" type="text/javascript"></script>

小李飞刀_SpringBoot


thymeleaf中替代jsp:include的写法

两种情况

一种是应用一段html代码

小李飞刀_springboot

在需要应用的地方添加

<div th:replace="foreground/common/head :: navbar" ></div>


一种是包含整个html页面

<div th:replace="navbar :: html"></div>


注意:

1、这里的th:replace里的路径是相对于templetes文件夹的。

2、冒号冒号前后都有空格,我没注意这一点踩了大坑


关键字:     SpringBoot  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有