一、freemarker是一个基于java的模板引擎。是mvc中View视图层的促进。
1.分离表现层和业务逻辑。
2.可以提高开发效率
3.使得开发过程中的人员分工更加明确
二、view解析model数据
1.基本数据取值
String /int/long/double/boolean username -->
${username! } ! 代表username为null ,不显示
boolean username= true -->
${username? String ('yes' ,'no' )} 转义为yes,no不能显示true 、false
null 值 ${null ! '我是空变量' }
missing 变量不存在 ${missing! '我是不存在' }
List < User> userList -->
< #list userList as item> ${item. name}-- ${item. birthday? String ('yyyy-MM-dd HH:mm:ss' )}< /list >
转义日期,freemaker识别sql包下的Date ,不识别util包下的Date ,需要转义。
2.变量赋值、运算
<#assign a =100 />
a = <font color ="red" > ${a}</font > <br />
a+100 = <font color ="red" > ${a+100}--${a*100}</font > <br />
3.封装对象取值
mav.addObject ("userObj" ,user)
${(userObj.brief )!"default_value" }
html文本原类型输出
${(userObj.brief )!?html}
4.集合
List 有序,可重复
List < String > list --> String
< #list list as item> ${item! }< /list >
List < User> userList --> User对象
< #list userList as item> ${item. name}-- ${item. birthday? String ('yyyy-MM-dd HH:mm:ss' )}< /list >
Map 无序,不重复
< #list map ? keys as key>
< font color= "red" > ${key}:${map [ key] }</font></br>
</#list>
5.if else条件
<#assign var =100 />
<#if var ==99 >
<font color ="red" > var=99</font >
</#if >
<#if var ==99 >
<font color ="red" > var=99</font >
<#else >
<font color ="red" > var!=99</font >
</#if >
<#if var > ; 99 >
<font color ="red" > var大于99</font >
<#elseif var ==99 >
<font color ="red" > var=99</font >
<#else >
<font color ="red" > var小于99</font >
</#if >
判断是否存在
<#if list ??> </#if >
<#if !( (var =='python'&&var?length==6)|| var ='java' )> </#if >
6.switch 支持String
< #assign var = 11 / >
< #switch var >
< #case 10 >
< #case 11 >
10 or 11
< #break >
< #case 100 >
100
< #break >
< #default >
other
< /switch>
7.字符串操作
<#assign a=/>
<#assign b=/>
连接 ${ a + b}
截取 ${ (a + b)?substring(5 ,8 )} -- wor
长度 ${ (a + b)?length}
大写 ${ (a + b)?upper_case}
小写 ${ (a + b)?lower_case}
index_of ${ (a + b)?index_of('w' )} --5
last_index_of ${ (a + b)?last_index_of('w' )} --7
替换 ${ (a + b)?replace('o' ,'xx' )}
<#assign myList=[2 ,4 ,5 ,6 ,3 ,6 ,4 ,9 ,1 ]/>
<#list myList?sort?reverse as item> reverse倒叙
下标${ item_index}:值${ item}
</#list >
${ myList?size}
${ myList[3 ]}
三、其他操作
1.自定义函数
实现接口TemplateMethodModelEx,将实现类传入mav.addObject("sort_method",SortMethod);
2.自定义指令
实现接口TemplateDirectiveModel,配置xml文件
3.内建函数
处理字符串 substring,cap_first,ends_with,contains
date ,datetime,time
starts_with,index_of,last_index_of,split ,trim
处理数字 string 、x?string ("0,##" ),round ,floor,ceiling
处理list first last , seq_contains,seq_index_of,size,reverse,sort ,sort_by,chunk
其他内建函数 is_string is_number,is_method,eval求值
代码实现
四、base路径获取
1.spring-mvc.xml
<bean id ="viewResolverFtl"
class ="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" >
<property name ="viewClass"
value ="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name ="suffix" value =".ftl" />
<property name ="contentType" value ="text/html;charset=UTF-8" />
<property name ="exposeRequestAttributes" value ="true" />
<property name ="exposeSessionAttributes" value ="true" />
<property name ="exposeSpringMacroHelpers" value ="true" />
<property name ="requestContextAttribute" value ="request" />
<property name ="cache" value ="true" />
<property name ="order" value ="0" />
</bean >
其中<property name="requestContextAttribute" value="request" />是关键。
ftl页面获取
<#assign base =request.contextPath />
<!DOCTYPE html>
<html lang ="zh" >
<head >
<base id ="base" href ="${base}" >
<title > 首页</title >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<link href ="${base}/static/bootstrap-3.3.4/css/bootstrap.min.css" rel ="stylesheet" >
<script src ="${base}/static/bootstrap-3.3.4/js/bootstrap.min.js" > </script >
js获取
var base = document.getElementById("base" ).href;
_send = function (async, url, value, success, error) {
$.ajax({
async : async,
url : base + '/' + url,
contentType : "application/x-www-form-urlencoded; charset=utf-8" ,
data : value,
dataType : 'json' ,
type : 'post' ,
success : function (data) {
success(data);
},
error : function (data) {
error(data);
}
});
};