上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

自己记的freemarker笔记,分享出来学习

[复制链接]

该用户从未签到

5

主题

1

回帖

4

积分

助理工程师

积分
4

新人报道

发表于 2021-2-15 18:24:26 | 显示全部楼层 | 阅读模式

本帖最后由 z1109079622 于 2021-2-15 18:29 编辑

freemarker 网页显示有点问题,我把源文件放到附件里了

一、数据类型

1.布尔型

布尔类型不能直接输出,要先转化为字符串
  • ?c
  • ?string

${flag?string("yes","no")}:如果flag的值是true,那值就是yes,如果是false那值就是no

2.日期类型

布尔类型不能直接输出,要先转化为日期类型或字符串
  • ?date:年月日
  • ?time:时分秒
  • ?datetime:年月日时分秒
  • ?string("自定义日期格式"):yyyy-MM-dd HH-mm-ss

${createDate?string("yyyy年MM月dd日 HH:mm:ss")}

3.数值类型

数值类型可以直接输出

转字符串

  • ?c:转普通字符串
  • ?string.currency:货币型字符串
  • ?string.percent:百分比型字符串

保留浮点型数值指定小数位

  • ?string["0.##"]

${avg?string["0.##"]}:保留小数点后两位

4.字符串类型

常用api

  • ?substring(start,end):截取字符串(左闭右开)
  • ?uncap_first:首字母小写输出
  • ?cap_first:首字母大写输出
  • ?lower_case:字母转小写
  • ?upper_case:字母转大写
  • ?length:获取字符串长度
  • ?starts_with("A")?string:是否以指定字符串开头(boolean)
  • ?ends_with("B")?string:是否以指定字符串结尾(boolean)
  • ?index_of("AAA"):获取指定字符处的索引
  • ?trim:去除字符串前后空格
  • ?replace("A","B"):替换指定字符串

字符串空值的处理

FreeMarker的变量必须赋值,否则就会抛出异常。而对于 FreeMarker来说,null值和不存在的变量是完全一样
的,因为 FreeMarker无法理解 null值
"!"指定确实变量的默认值

${value!"默认值"}:如果value值为空,那默认值是字符串:默认值

"??"判断变量是否存在

${(value??)?string}:如果变量存在,就返回true,不存在就返回false

5.sequence序列类型

数组、list、set

输出

使用#list进行输出


        ${元素名}

api

  • ${序列名?size}:获取序列的长度
  • ${序列名?index}:获取序列元素的下标
  • ${序列名?first}:获取第一个元素
  • ${序列名?last}:获取最后一个元素
  • ${序列名?join(",")}:以","分隔 把数组拼成一个字符串
  • :倒序输出
  • :升序输出
  • :降序输出

如果list集合元素是JavaBean

JavaBean对象的属性一定要有对应的get方法才能获取对应的值


        ${user.id}

按照指定字段排序


        ${user.id}

6.hash类型

Map集合
也是用list标签输出
  • 获取key并通过key获取value

    
          ${key}
          ${hash[key]}
    
  • 直接获取map的value

    
          ${value}
    

二、常用指令

assign

使⽤assign指令你可以创建⼀个新的变量, 或者替换⼀个已经存在的变量。
 (可以定义多个变量)

逻辑判断指令

注:小于是lt、 大于是gt、 大于等于是gte、 小于等于是lte


...

...

...

...

list

  • 
                  当没有选项时,执⾏else指令
    

macro 自定义指令

  • 不带参数的

    格式:
    
                  指令内容
    
    使⽤:
    
  • 带参参数的

    格式:
    
                  指令内容
    
    使⽤:
    

nested占位符

可以将⾃定义指令中的内容通过nested指令占位,当使⽤⾃定义指令时,会将占位内容显示。

        这是⼀段⽂本!

这是⽂本后⾯的内容!

import

导入其他flt的命名空间,就可以使用命名空间中定义的宏和方法了

include

在freemarker中插入整个页面。html文件或者freemarker文件都可以

三、FreeMarker页面静态化

用于输出html
可以把数据库中的数据写入到html中,用于内容不经常改变的页面
  • 服务器

    // 实例化模板配置对象
    Configuration configuration = new Configuration();
    // 设置加载模板的上下⽂ 以及 设置加载模板路径(模板存放的路径)
    
    configuration.setServletContextForTemplateLoading(getServletContext(),"/template");
    // 设置模板的编码格式
    configuration.setDefaultEncoding("UTF-8");
    // 加载模板⽂件,获取模板对象
    Template template = configuration.getTemplate("news.ftl");
    
    // 设置模型数据
    Map map = new HashMap(); 
    map.put("title", "特别就业季:稳就业情况如何? 哪些问题待解?"); 
    map.put("source", "⼈⺠⽇报");
    map.put("pubTime", new Date());
    map.put("content", "中共中央政治局常务委员会近⽇召开会议强调," +
    "要有针对性地开展援企、稳岗、扩就业⼯作," +
    "做好⾼校毕业⽣、农⺠⼯等重点群体就业⼯作," +
    "积极帮助个体⼯商户纾困。疫情期间,稳就业情况如何?还有哪些问题待解?" +
    "记者采访了不同群体,记录这个特别的就业季。");
    
    // 获取项⽬所在的根⽬录
    String basePath = request.getServletContext().getRealPath("/");
    // 设置⻚⾯存放的⽬录
    File htmlFile = new File(basePath + "/html");
    // 判断⽬录是否存在
    if (!htmlFile.exists()) {
    // 如果⽬录不存在,则新建⽬录
          htmlFile.mkdir();
    }
    // 获取⽂件名(随机⽣成不重复的⽂件名)
    String fileName = System.currentTimeMillis() + ".html";
    // 创建html⽂件
    File file = new File(htmlFile, fileName);
    // 获取⽂件输出流
    FileWriter writer = new FileWriter(file); 
    
    try {
    // 输出html        将模型数据填充到模板中
          template.process(map, writer);
    // 输出成功
          System.out.println("新闻创建成功!");
    } catch (TemplateException e){ 
      e.printStackTrace();
    } finally {
          writer.flush(); 
      writer.close();
    }
    

发表回复

本版积分规则

快速回复 返回顶部 返回列表