一、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="hello"/> <#assign b="world"/> 连接 ${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
<!-- FreeMarker视图解析 如返回userinfo。。在这里配置后缀名ftl和视图解析器。。 --> <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); } }); };
转载请标明出处:freemaker学习笔记
文章来源: freemaker学习笔记