- 在springboot中配置freemarker
html页面中普通取值
在controller类方法中使用org.springframework.ui.Model传参
@RequestMapping(value = "/hello")
public String query(Model model) throws Exception {
model.addAttribute("msg", "hello freemarker");
return "hello";
}
使用变量值, 在标签中直接使用变量值
<label>${msg}<label/>
- html页面中使用对象
@RequestMapping(value = "/hello")
public String query(Model model) throws Exception {
model.addAttribute("msg", "hello freemarker");
Map<String, Object> person = new HashMap<>();
person.put("name", "zs");
person.put("age", 20);
model.addAttribute("person", person);
return "hello";
}
在标签中直接使用对象
<label>${msg}</label>
<label>${person.name}</label>
<label>${person.age}</label>
普通运算与字符串
<label>${'姓名:'+person.name}</label>
<label>${'年龄:'+(person.age+10)}</label>
html页面中的逻辑控制
使用if进行控制
<#if person.age==20>
张三都20碎了,要做一个坚强的打工人
<#else>
张三不知道多少碎了
</#if>
if 语句中可以使用的运算符:
比较运算符:
> (gt): 大于号,推荐使用gt
< (lt): 小于号,推荐使用lt
>= (gte): 大于等于, 推荐是用gte
<= (lte): 小于等于,推荐使用lte
== : 等于
!= : 不等于
逻辑运算符:
1. 逻辑与 &&:
${(bt && bf)?string}
2. 逻辑或 ||:
${(bt || bf)?string}
3. 逻辑非 ! :
${(!bt)?string}
if-else-if使用:
<#if person.age == 10>
person.age is 10
<#elseif person.age == 20>
person.age is 20
<#elseif person.age == 30>
person.age is 30
<#elseif person.age == 40>
person.age is 40
<#else>
person.age is not 10 nor 20 nor 30 nor 40
</#if>
switch
略
html页面中的循环语句
@RequestMapping(value = "/hello")
public String query(Model model) throws Exception {
model.addAttribute("msg", "hello freemarker");
List<Map<String, Object>> personList = new ArrayList<>();
Map<String, Object> person = new HashMap<>();
person.put("name", "zs");
person.put("age", 20);
personList.add(person);
model.addAttribute("personList", personList);
return "hello";
}
在标签中直接使用循环
<#list personList as person>
<p>
<span>${person.name}</span>
<span>${person.age}</span>
</p>
</#list>
使用循环内置的变量
<#list personList as person>
<p>
<span>${person_index}循环索引</span>
<span>${person.name}</span>
<span>${person.age}</span>
</p>
</#list>
freemarker控制html标签属性
控制input值:
<#list personList as person>
<p>
<span><input type="text" value="${person.name}"></span>
<span><input type="text" value="${person.age}"></span>
</p>
</#list>
三元表达式修改style样式:
<#list personList as person>
<p>
<span style="color: ${(person_index%2==1)?string('red','blue')};">测试</span>
<span style="color: ${'blue'};font-size: ${'30px'}">测试</span>
</p>
</#list>
freemarker设置html标签属性
<#list personList as person>
<p>
<span style="color: ${(person_index%2==1)?string('red','blue')};">测试</span>
span ${person.name}="${person.age}">测试</span>
</p>
</#list>
其他标识
${val?"默认值"} :?? 双问号,如果val为nul的话就输出默认值,不是null就输出val
${date?string('pattern')} : ? 单问号,访问对象的方法,<#if person.age==20?if_exists> if_exists是判断boolean,前面的表达式结果需要为boolean类型, <#if person?>, 如果为不为null, 则执行对应表达式
! :${value!"默认值"}, 如果value为空, 则使用"默认值"进行输出
其他内置函数或操作
- ${name?if_exists} 变量存在,输出该变量,否则不输出
- ${name!} 变量存在,输出该变量,否则不输出
- ${name?default(“”)} 变量不存在,取默认值
- ${name!“”} 变量不存在,取默认值
- ${name?html} 对字符串进行html编码,对html中特殊子父进行转义
- ${name?cap_first} 使字符串第一个字母大写
- ${name?lower_case} 将字符串转换成小写
- ${name?upper_case} 将字符串转换成大写
- ${name?trim} 取消字符串前后空白字符
- KaTeX parse error: Expected '}', got 'EOF' at end of input: {"test{name!}"} 输出test+变量名
- ${name[1…4]}取name的1到4个字符
- ${name?substring(0,4)}截取0到4的字符串
- ${date?string(‘yyyy-MM-dd’)}日期格式化输出