zoukankan      html  css  js  c++  java
  • SpringBoot模板

    Thymeleaf模板

    关于Thymeleaf的优点,我只说一条:它就是html页面。

    相关pom依赖:

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

      

    Spring Boot官方文档建议在开发时将缓存关闭,那就在application.properties文件中加入下面这行

    正式环境还是要将缓存开启的

    对应的后台代码

    package com.ssm.springboot.entity;
    
    import lombok.Data;
    
    /**
     * @author xyls
     * @blog name & blog address 027@0030
     * @create  2019-11-26 15:33
     */
    @Data
    public class User {
        private Integer uid;
        private String userName;
        private String password;
    
    
        public User(Integer uid, String userName, String password) {
            this.uid = uid;
            this.userName = userName;
            this.password = password;
        }
    
    
        public User() {
        }
    }
    

      

    package com.ssm.springboot.controller;
    
    import com.ssm.springboot.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author xyls
     * @blog name & blog address 027@0030
     * @create  2019-11-26 15:34
     */
    @Controller
    @RequestMapping("/thymeleaf")
    public class UserController {
    
        @RequestMapping("/by1")
    
        public String by1(HttpServletRequest request) {
            request.setAttribute("msg", "传递单个字符串");
            List<User> userList = new ArrayList<>();
            userList.add(new User(1, "连斩", "117649"));
            userList.add(new User(2, "连战", "117649"));
            userList.add(new User(3, "恋栈", "117649"));
            request.setAttribute("userList", userList);
            request.setAttribute("htmlStr", "<span style='color:red'>转义HTML代码块</span>");
    
            return "list";
        }
    }
    

      

    前台HTML页面

      

     

     注意:

     在演示thymeleaf时,如果写了freemarker,先把application中的free marker部分先注释,不然没效果

    Freemarker模板

    学习网站:http://freemarker.foofun.cn/

    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>
    

     没配置的情况下是不能.ftl文件的,现在改下

    list.ftl

    <!DOCTYPE html> 
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    
        <title>Title</title>
    </head>
    <body>
    <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>
    sys
    <#global ctx2>
        ${springMacroRequestContext.contextPath}
    </#global>
    ${ctx1}和${ctx2}
    sqs
    
    
    </body>
    </html>
    

      foot.ftl

     

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

      common.ftl

     

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

      相关controler层的Java代码

     

    package com.ssm.springboot.controller;
    
    import com.ssm.springboot.entity.Role;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author xyls
     * @blog name & blog address 027@0030
     * @create  2019-11-26 16:36
     */
    @Controller
    @RequestMapping("/freemarker")
    public class RoleController {
        @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";
        }
    }
    

      浏览器显示结果

     

     注意:

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

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

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

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

     <#include 'common.ftl'>

        <script src="js/xxx.js" type="text/javascript"></script>

     thymeleaf中替代jsp:include的写法

     

    一种是应用一段html代码

    在需要应用的地方添加(2)

     一种是包含整个html页面(1)

     

    注意:

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

    2、冒号冒号前后都有空格

      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/**

  • 相关阅读:
    jdk9 特性
    jdk8 特性
    Eclipse中Spring插件的安装
    C++避免程序运行完后窗口一闪而过的方法
    完全二叉树节点个数
    Shell 编写倒着的*三角形
    Drools源于规则引擎
    Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
    docker环境搭建
    MyBatis根据数组、集合查询
  • 原文地址:https://www.cnblogs.com/omji0030/p/11939091.html
Copyright © 2011-2022 走看看