[Freemark]freemark常用语法

来源:互联网 发布:java.util.*是什么包 编辑:程序博客网 时间:2024/06/05 05:59
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,
而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker模板的编写语言为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意于要展示什么数据。

注意:freemarker中显示某对象使用${name}, freeMarker控制较严格,对于null,或者miss value,freemarker会报错

1. 需要判断对象是否为空;

2. 也可以通过设置默认值来避免对象为空的错误。

判断为空具体方法:

!:default value operator,语法结构为:unsafe_expr!default_expr,

     ${name!''}如果name为空,就以默认值(“!”后的字符)显示。

   对象user,name为user的属性的情况,user,name都有可能为空,可以写成${(user.name)!''},

     表示user或者name为null,都显示为空。

??: Missing value test operator ,测试是否为missing value

     product.color??将只测试color是否为null

     (product.color)??将测试product和color是否存在null

?exists:旧版本的用法


常用语法:

<#--   --> freemark的注释

前提:将数据封装到map中,每个元素可以是个对象,有属性,有关联的对象

properties 为准备好的Map对象集合,

${ package } packge为变量,为map的key,${}后可以直接显示内容;
${.now} 当前时间


className=dept
${ className?cap_first }   首字母大写
${ className?uncap_first } 首字母小写
全小写
<#if (list.title?length>15)> 字符串长度
${ package?replace(".","/") } 替换

== html
html 用于将字符串中的<、>、&和“替换为对应得&lt;&gt;&quot:&amp


== 特殊字符替换
$ ${'$'}
# ${'#'}


== FreeMarker不会自动进行类型的转换
 
常见的转换:
 
String -->  int            ?eval
int       -->  String      ?c

freemarker中的c函数是将数字转换成字符串,当你在页面中要显示带小数的数字时,一定要写成${x?c}而不能写成${x?default('')},否则显示出的数字都变成了整数,小数位都被自动截掉了。切记!!!

== 遍历集合
<#list properties as pro>  
private  ${pro.proType} ${pro.proName};<#if pro.proComment != "">//${pro.proComment}</#if>
</#list>


== 定义变量,显示变量
<#assign x=pro.proName?index_of("createBy")>
${x}

布尔类型转换为字符串显示
<#assign x=pro.primary?string('yes', 'no')>
${x}


Boolean类型不能使用isXxx,需要使用getXxx,因为Freemarker使用java会对isXxx映射返回boolean基本型,但是freemarker不支持基本类型boolean,会抛异常。
freemarker中输出时可以使用这种方式输出${xxx?string("true","flase")}当xxx为true时显示字符串true,否则为字符串false,当然true,false字符串也可以换成其他字符串,比如yes和no。

==布尔判断
<#if pro.primary>
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
</#if>
<#if pro.primary?string('yes', 'no')=="no">
<#if "createBy,createDept,createTime,updateBy,updateTime"?index_of(pro.proName) == -1>
public ${pro.proType} get${pro.proName?cap_first}() {
return this.${pro.proName};
}
public void set${pro.proName?cap_first}(${pro.proType} ${pro.proName}) {
this.${pro.proName} = ${pro.proName};
}
</#if>
</#if>


==判断空串
<#if pro.proComment != "">//${pro.proComment}</#if>

1. 判断对象是否存在(null)
例如判断 target 是否为null,如果不为 nll 则做xxx动作
<#if target??>
    xxxx
</#if>
 (目标变量后面连续两个??)
 
2. 字符串或数字比较
 java里标准字符串比较需要 .equals() 方法,在freemarkder中进行了简化,字符串的比较方法和数字做到完全一样
 <#if str == "success">
    xxx
</#if>
<#if str !== "error">
    xxx
</#if>

==判断是否包含子串:
pro.proName为子串
<#if "CreateBy,CreateDept,CreateTime"?index_of(pro.proName)==-1>

== 高级应用:宏        --常用场景:实现每个文件引入版本

example:

在CopyRight.ftl中定义:

<#macro CopyRight> 

/**
 * @Description: ${ className }Service接口
 * @Author: 米米米
 * @Company: http://java.cn
 * @CreateDate: ${.now}
 */
 </#macro>

调用:
<#import "CopyRight.ftl" as my>
<@my.CopyRight/>

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车子右前轮偏磨怎么办? 轮胎边缘磨黑了怎么办 36周胎儿绕颈一周怎么办 孕中期胎儿偏小怎么办 怀孕34周偏小2周怎么办 胎盘低怎么办6个月了 怀孕四个月胎盘低怎么办 怀孕五个月胎盘低怎么办 怀孕3个月胎盘低怎么办 怀孕三个月了胎盘低怎么办 新房交房开发商拿不出证件怎么办? 新干式变压器未送电进水怎么办 三相380转单相220怎么办 外国人一直找你出去怎么办 美团众包跑腿单物品太重怎么办 美团退款成功后 物品怎么办 win10电脑没有网络图标怎么办 电脑开机桌面什么都没有怎么办 xp桌面什么都没有了怎么办 手机下滑通知栏不见了怎么办 跑800米赶上月经怎么办 强迫症吃药没效怎么办 复读生档案丢了怎么办 大学退学重新高考学籍怎么办 玻尿酸鼻子宽了怎么办 被昆山市圆通快递公司骗怎么办 借壳上市后壳公司怎么办 盐城国有民办学校倒闭教师怎么办 联想复印机显示更换墨粉盒怎么办 襄垣县共公自行车卡怎么办 转南京江宁户口怎么办儿童医保 剑与家园鬼服怎么办 花生苗出现虫洞怎么办 被蝎子草扎到手怎么办 被蝎子草蛰了怎么办 螫麻子草扎了怎么办 苹果app没删除干净怎么办 字写的太潦草看不懂怎么办 肝内胆管结石疼怎么办 肝内胆管有结石怎么办 肝里胆管有结石怎么办