Freemarker-语法笔记
如果想要运行本文示例,则先应该做好这篇文章的前提:Freemarker-本地硬编码的方式使用
首先我们定义一个类,名字叫User,这个类作为本文的前提
public class User {
private String name;
private int age;
private boolean isHuman;
// 为了排版省略get/set,但是你要注意你不能省略,或者使用lombok
}
示例1:显示单个User
JAVA文件
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration(new Version("2.3.31"));
String fileName = "fremk.ftl";
String templateFilePath = System.getProperty("user.home") + File.separator + "Desktop" + File.separator + "fremk.ftl";
cfg.setDirectoryForTemplateLoading(new File(templateFilePath).getParentFile());
cfg.setDefaultEncoding("UTF-8");
Template template = cfg.getTemplate(fileName);
// ==============设置model
User user = new User();
user.setName("兔二抱");
user.setAge(3);
StringWriter out = new StringWriter();
template.process(user, out);// 此处标准做法其实是将user放到一个map中,不过这次是代码演示
// ==============
System.out.println(out);// 这里会打印出“你好,我是兔二抱”
}
FTL文件
你好,我是${name},我${age}岁了
示例2:循环List<User>
JAVA文件
// ==============设置model
Map<String, Object> model = new HashMap<>();
List<User> users = new ArrayList<>();
User u1 = new User();
u1.setName("兔二抱");
u1.setAge(3);
User u2 = new User();
u2.setName("兔三抱");
u2.setAge(3);
users.add(u1);
users.add(u2);
model.put("users", users);
StringWriter out = new StringWriter();
template.process(model, out);// 此处需要将users放到一个map中,这也是标准做法
// ==============
FTL文件
<#list users as user>
<li>${user.name}</li><#-- 注意,这里的li是html标签,不是freemarker的标签 -->
</#list>
注意:使用一个 Map 来作为根数据模型更加灵活,因为它可以同时包含多个不同类型的数据,包括列表、单个对象和其他值。也就是说template.process
方法的第一个参数,强烈推荐使用Map作为参数
示例2:判断List中最后一个元素
下面的例子会打印兔二抱,兔三抱
,注意"兔三抱"后面没有逗号
FTL文件如下
<#list users as user>
${user.name}
<#-- has_next是freemarker的关键字,用来判断是否有下一个元素 -->
<#if user?has_next>
,
</#if>
</#list>
示例3:判断true还是false
下面的例子会打印是人类
JAVA文件
// ==============设置model
User user = new User();
user.setHuman(true);
StringWriter out = new StringWriter();
template.process(user, out);// 为了演示,直接把user扔里,所以没用map再包一层
// ==============
FTL文件如下
<#-- 注意这里不是isHuman,这与freemarker没有关系,java bean规范如下 -->
<#-- is开头的基本数据类型boolean最终去掉is -->
<#-- is开头的封装数据类型Boolean是不会去掉is的 -->
<#-- 如果java代码用map又包一层,比如map.put("aaa",user),则if里应该是aaa.human -->
<#if human>
是人类
<#else>
不是人类
</#if>
示例4:处理#或者其他关键符号开头的文本
#
是freemarker的关键标识符,所以如果想在模板处理之后显示#
,那就需要特殊处理,例如java代码有String name=“兔二抱”,而我也想最终在页面上显示#{兔二抱}
,那么#{${name}}
这么写是不行的,需要如下写法才行
JAVA文件
String name = "兔二抱";
FTL文件
<#--写法1:在${}内部解析name并且在内部用字符串拼接"#{"和"}" -->
${"#{"+name+"}"}
<#--写法2:使用Assign关键字定义一个freemarker变量来存储井号和左大括号字符串 -->
<#assign aaa="#{"/>
${aaa}name}
原文地址:https://blog.csdn.net/u011624903/article/details/145013105
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!