• springboot~使用freemaker模版进行部署


    实事上keycloak框架使用了freemaker进行页面部署,在页面上使用了vue进行了渲染,还是比较跟的上技术前沿的,只不过,keycloak没有使用spring框架,可能是因为它是redhat公司推出的产品吧。

    依赖引用

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- FreeeMarker模板引擎所需依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    

    配置文件

    spring:
      freemarker:
        suffix: .ftl                                 # 设置模板后缀名
        content-type: text/html                      # 设置文档类型
        charset: UTF-8                               # 设置页面编码格式
        cache: false                                 # 设置页面缓存
        template-loader-path: classpath:/templates   # 设置ftl文件路径
      mvc:
        static-path-pattern: /static         # 设置静态文件路径,js,css等
    

    添加模板

    • resources/templates/template.ftl
    <#macro registrationLayout bodyClass="默认值,子页面没有设置会使用这个值,子页面设置后会覆盖它">
    <#--语法介绍:-->
    <#--<#macro name param1 param2 ... paramN>--><!-- macro在模板里定义的变量,在子页面中可以重写变量的内容,它会反映的模板里-->
    <#--<#nested loopvar1, loopvar2, ..., loopvarN>-->
    <#--<p>${param1?cap_first}-->
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title><#nested "head"></title>
        </head>
        <body>
        <p>
            ${bodyClass}
        </p>
        <h1>FreeMaker模板页面</h1>
        <#nested "form">
        </body>
        </html>
    </#macro>
    

    添加页面

    • resources/templates/f1/list.ftl
    <#import "../template.ftl" as layout>
    <@layout.registrationLayout bodyClass="<span style='color:red'>修改模板里的变量</span>";section>
        <#if section = "head">
            列表
        <#elseif section = "form">
            <table border="1">
                <tr>
                    <td>编号</td>
                    <td>名称</td>
                    <td>年龄</td>
                    <td>操作</td>
                </tr>
            </table>
        </#if>
    </@layout.registrationLayout>
    

    添加controller

    @Controller
    @RequestMapping("free")
    public class F1Controller {
        @RequestMapping("list")
        public String selectUser(){
            return "f1/list";
        }
    }
    
    

    上面用到了freemaker中的宏macro,引用import,模块嵌入nested 首字母大写内建函数?cap_first等知识点,大家如果看不懂,可以查以上相关资料。

    页面运行后的截图

    freemaker几个内建函数

    (1) 常用内建函数

    • 处理字符串:
      • ?substring 截取字符串,包头不包尾(下标)
      • ?cap_first 第一个字母大写
      • ?end_with 以什么字母结尾
      • ?contains 是否包含目标字符串
      • ?date datetime time 转换成日期格式
      • ?starts_with 以什么字母开头
      • ?index_of 返回某个指定的字符串值在字符串中首次出现的位置(下标)
      • ?last_index_of 获取指定字符出现的最后位置(下标)
      • ?split 分隔
      • ?trim 去两端空格
    • 处理数字:
      • ?string x?string(“0.##”) 变成小数点后几位
      • ?round 四舍五入
      • ?floor 去掉小数点
      • ?ceiling 近1 变成整数
    • 处理list:
      • ?first: 取List值第一个值
      • ?last: 取List值最后一个值
      • ?seq_contains: 是否包含指定字符
      • ?seq_index_of: 指定字符所在位置
      • ?size: 集合大小
      • ?reverse: 集合倒序排列
      • ?sort: 对集合进行排序
      • ?sort_by: 根据某一个属性排序
      • ?chunk: 分块处理
    • 其他:
      • ?is_string: 是否为字符类型
      • ?is_number: 是否为整数类型
      • ?is_method: 是否为方法
    • 判断整个变量
      • ?has_content: 判断对象是否为空或不存在
      • ?eval: 求值

    (2) macro(宏指令)

    • 调用:<@macro_name param />
    <#macro 变量名 参数>
      <#nested/>
    </#macro>
    

    (3) function(函数指令)

    • 调用:${function_name(param)}
    <#function 变量名 参数>
      <#return>
    </#function>
    

  • 相关阅读:
    02-vue过滤器和键盘修饰符
    01-vue指令
    webpack
    笔记:随机生成数、字符串
    笔记:long、longlong、int、float、NSString相互转换
    关于NSStringFromClass的一点见解
    iOS中UITextField常用设置和方法
    iOS 倒计时的一种实现
    iOS UITextField的代理<UITextFieldDelegate>的几点笔记
    iOS 单例模式简单实例
  • 原文地址:https://www.cnblogs.com/lori/p/15101880.html
Copyright © 2020-2023  润新知