.ftl文件简介及语法
来源:互联网 发布:淘宝购物卖家没退运费 编辑:程序博客网 时间:2024/06/06 06:46
.ftl文件简介及语法
1、Freemarker模板的文件后缀名
2、Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。
据个人理解,Freemarker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、Freemarker自定义流程控制语言、Freemarker自定义的操作函数等等,在装载网页的时候,Freemarker模板自动从数据模型中提取数据,并解释整个网页为我们熟知的HTML页面。
在B/S程式设计中,常常有美工和程序员二个角色,他们具有不同专业技能:美工专注于表现——创建页面、风格、布局、效果等等可视元素;而程序员则忙于创建程式的商业流程,生成设计页面要显示的数据等等。
很多时候,要显示的资料在设计的时候并不存在,它们一般是在运行时由程式产生的,比如执行“价格不高于800NT的USB Disk”查询的返回结果。这种技术需求产生了JSP等Scriptlet,JSP十分强大,但是也常常被滥用,并导致一些不良的后果,将逻辑和表现混合在一起。,破坏了美工和程序员职责的正常分解使JSP页面难以阅读和维护。
模板引擎就是为了解决上面的问题而产生的。在设计HTML的时候,我们加入一些特定指令来指定要插入哪些数据,这些加了特殊指令的HTML或者其他文本,我们称为模板(Template)。而模板引擎会在输出页面时,用适当的数据替代这些代码
模板和嵌入JSP的HTML是不同的,模板指令只有很有限的编程能力,可以避免混入商业逻辑。
总结
简单的说,FreeMarker就是一种用Java编写的模板引擎,它根据模板输出多种规格的文本。特别指出的是,FreeMarker与Web应用框架无关,它同样可以应用在非Web应用程序环境中,而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML/RTF/Java源代码等。
Freemarker是一个非常优秀的模版引擎,这个模版引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模版中,从而生成标准输出。
FreeMarker特别适应与MVC模式的Web应用,通常有Java程序准备要显示的数据,由FreeMarker模版引擎来生成页面,而FreeMarker模版则提供页面布局支持,从而能更好地规范MVC架构,保证视图逻辑和业务逻辑分离。
语法:
直接调用后台方法代码<PRE class=ftl name="code">默认两种用法 ${!("")} ${default("")}</PRE> <@s.property value="%{getPieceByType(type)}"/> getPieceByType为方法名,type为值 Ftl代码默认两种用法 ${!("")} ${default("")} 默认两种用法 ${!("")} ${default("")} <@s.property value="%{getPieceByType(type)}"/> getPieceByType为方法名,type为值 时间格式化的方法代码 最好加上 判断下c时候存在 <#if c??> ${c.addtime?string("yyyy-MM-dd HH:mm:ss") </#if> 最好加上判断下c时候存在 <#if c??> ${c.addtime?string("yyyy-MM-dd HH:mm:ss") </#if> 判断长度并截取代码 <#if c.titleH1??> <#if c.titleH1?length lt 33> ${c.titleH1} action 中 配置 private String inputPath; private HttpServletResponse servletResponse; public void setServletResponse(HttpServletResponse arg0) { this.servletResponse = arg0; } public HttpServletResponse getServletResponse() { return servletResponse; } public String formguideDownloads() throws Exception { formguide.setTemplateId(formguide.getTemplateId()+".jsp"); return SUCCESS; } xml中配置 <action name="formguideDownloads" class="com.jcauto.cms.action.FormguideAction" method="formguideDownloads"> <result name="success" type="stream"> <param name="contentType">text/plain;charset=utf-8</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${formguide.templateId}"</param> <param name="bufferSize">4096</param> </result> </action> 页面上 formguide/formguideDownloads.action?formguide.templateId=${form.templateId?if_exists}&inputPath=${fileUrlFileName?if_exists}${form.templateId?if_exists}.jsp" <#else> ${c.titleH1[0..32]}... </#if> </#if> 注意length是从0开始算所以如果想截取33位就使用0..32就可以了 <#if c.titleH1??> <#if c.titleH1?length lt 33> ${c.titleH1} action 中 配置 private String inputPath; private HttpServletResponse servletResponse; public void setServletResponse(HttpServletResponse arg0) { this.servletResponse = arg0; } public HttpServletResponse getServletResponse() { return servletResponse; } public String formguideDownloads() throws Exception { formguide.setTemplateId(formguide.getTemplateId()+".jsp"); return SUCCESS; } xml中配置 <action name="formguideDownloads" class="com.jcauto.cms.action.FormguideAction" method="formguideDownloads"> <result name="success" type="stream"> <param name="contentType">text/plain;charset=utf-8</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${formguide.templateId}"</param> <param name="bufferSize">4096</param> </result> </action> 页面上 formguide/formguideDownloads.action?formguide.templateId=${form.templateId?if_exists}&inputPath=${fileUrlFileName?if_exists}${form.templateId?if_exists}.jsp" <#else> ${c.titleH1[0..32]}... </#if> </#if> 注意length是从0开始算所以如果想截取33位就使用0..32就可以了 List-map使用代码 ftl.list <#list List as list> ${list} </#list> list_index取出行号索引从0开始 formguideList?size 可以判断list大小 这里多说一句有很多list中属性的用法不一一列举,大家可以查下ftl API ftl.map <#list Map?keys as s> ${Map[s]} </#list> s.list <@s.iterater value="List" var=list> </@s.iterater> s.if <@s.if> </@> <@s.else> </@> ftl.if <#if> <#else> </#if> ftl.list <#list List as list> ${list} </#list> list_index取出行号索引从0开始 formguideList?size 可以判断list大小 这里多说一句有很多list中属性的用法不一一列举,大家可以查下ftl API ftl.map <#list Map?keys as s> ${Map[s]} </#list> s.list <@s.iterater value="List" var=list> </@s.iterater> s.if <@s.if> </@> <@s.else> </@> ftl.if <#if> <#else> </#if> 上传代码 <form actoin="${path}/piece/findPiece.action" name="form1" method="Post" enctype="multipart/form-data"> <s:file name="sfile"/> </form> 后台action中配置 File sfile; String sfileName; String sfileType; <form actoin="${path}/piece/findPiece.action" name="form1" method="Post" enctype="multipart/form-data"> <s:file name="sfile"/> </form> 后台action中配置 File sfile; String sfileName; String sfileType; 下载代码 前台 <a href="${path}/formguide /formguideDownloads.action?formguide.templateId=${form.templateId?if_exists}& amp;inputPath=${fileUrlFileName?if_exists}${form.templateId?if_exists}.jsp"& gt;下载</a> | 后台 private HttpServletResponse servletResponse; private String inputPath; public void setServletResponse(HttpServletResponse arg0) { this.servletResponse = arg0; } public HttpServletResponse getServletResponse() { return servletResponse; } public String formguideDownloads() throws Exception { formguide.setTemplateId(formguide.getTemplateId()+".jsp"); return SUCCESS; } public InputStream getInputStream() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream( inputPath); } xml <action name="formguideDownloads" class="com.jcauto.cms.action.FormguideAction" method="formguideDownloads"> <result name="success" type="stream"> <param name="contentType">text/plain;charset=utf-8</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${formguide.templateId}"</param> <param name="bufferSize">4096</param> </result> </action> 前台 <a href="${path}/formguide /formguideDownloads.action?formguide.templateId=${form.templateId?if_exists}& amp;inputPath=${fileUrlFileName?if_exists}${form.templateId?if_exists}.jsp"& gt;下载</a> | 后台 private HttpServletResponse servletResponse; private String inputPath; public void setServletResponse(HttpServletResponse arg0) { this.servletResponse = arg0; } public HttpServletResponse getServletResponse() { return servletResponse; } public String formguideDownloads() throws Exception { formguide.setTemplateId(formguide.getTemplateId()+".jsp"); return SUCCESS; } public InputStream getInputStream() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream( inputPath); } xml <action name="formguideDownloads" class="com.jcauto.cms.action.FormguideAction" method="formguideDownloads"> <result name="success" type="stream"> <param name="contentType">text/plain;charset=utf-8</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${formguide.templateId}"</param> <param name="bufferSize">4096</param> </result> </action> Ftl中的循环代码 使用宏标签来循环生成固定的值 其中local中来定义值 repeat用来生成 <#macro repeat count> <#local y = "<img src='http://www.jcauto.com.cn/ProConsole/images/star0506.gif' border='0' alt='' width='11' height='11'/>"> <#list 1..count as x> ${y} ${count}/${x}: <#nested> </#list> </#macro> <@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat> 使用宏标签来循环生成固定的值 其中local中来定义值 repeat用来生成 <#macro repeat count> <#local y = "<img src='http://www.jcauto.com.cn/ProConsole/images/star0506.gif' border='0' alt='' width='11' height='11'/>"> <#list 1..count as x> ${y} ${count}/${x}: <#nested> </#list> </#macro> <@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat> Ftl变量转换代码 ?number转为数字 ?c转为字符串 ?string转为字符串 ?currency(货币) ?percent(百分比) trim 删除字符串首尾空格 ${“ String ”?trim} 结果为String split使用指定的分隔符将一个字符串拆分为一组字符串 <#list “This|is|split”?split(“|”) as s> ${s} </#list> ${“strabg”?replace(“ab”,”in”)} 结果为string ${“string”?contains(“ing”)?string} 结果为true 注意:布尔值必须转换为字符串才能输出 ${“string”?index_of(“in”) 结果为3 ${“string”?index_of(“ab”) 结果为-1 length返回字符串的长度 ${“string”?length}结果为6 lower_case将字符串转为小写 ${“STRING”?lower_case}à结果为string upper_case将字符串转为大写 ${“string”?upper_case}à结果为STRING ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。 ${“string”?ends_with(“ing”)?string} 返回结果为true 注意:布尔值必须转换为字符串才能输出 html 用于将字符串中的<、>、&和“替换为对应得<>":& index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。 Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。 如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为 ${‘str’?substring(0)}à结果为str ${‘str’?substring(0,1)}à结果为s 2.cap_first 将字符串中的第一个单词的首字母变为大写。 ${‘str’?cap_first}à结果为Str 3.uncap_first将字符串中的第一个单词的首字母变为小写。 ${‘Str’?cap_first}à结果为str 4.capitalize将字符串中的所有单词的首字母变为大写 ${‘str’? capitalize}à结果为STR date,time,datetime将字符串转换为日期 例如: <#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)> <#assign date2=”9:28:20”?time(“HH:mm:ss”)> <#assign date3=” 2009-10-12 9:28:20”?time(“HH:mm:ss”)> ${date1}à结果为2009-10-12 ${date2}à结果为9:28:20 ${date3}à结果为2009-10-12 9:28:20 ?number转为数字 ?c转为字符串 ?string转为字符串 ?currency(货币) ?percent(百分比) trim 删除字符串首尾空格 ${“ String ”?trim} 结果为String split使用指定的分隔符将一个字符串拆分为一组字符串 <#list “This|is|split”?split(“|”) as s> ${s} </#list> ${“strabg”?replace(“ab”,”in”)} 结果为string ${“string”?contains(“ing”)?string} 结果为true 注意:布尔值必须转换为字符串才能输出 ${“string”?index_of(“in”) 结果为3 ${“string”?index_of(“ab”) 结果为-1 length返回字符串的长度 ${“string”?length}结果为6 lower_case将字符串转为小写 ${“STRING”?lower_case}à结果为string upper_case将字符串转为大写 ${“string”?upper_case}à结果为STRING ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。 ${“string”?ends_with(“ing”)?string} 返回结果为true 注意:布尔值必须转换为字符串才能输出 html 用于将字符串中的<、>、&和“替换为对应得<>":& index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。 Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。 如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为 ${‘str’?substring(0)}à结果为str ${‘str’?substring(0,1)}à结果为s 2.cap_first 将字符串中的第一个单词的首字母变为大写。 ${‘str’?cap_first}à结果为Str 3.uncap_first将字符串中的第一个单词的首字母变为小写。 ${‘Str’?cap_first}à结果为str 4.capitalize将字符串中的所有单词的首字母变为大写 ${‘str’? capitalize}à结果为STR date,time,datetime将字符串转换为日期 例如: <#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)> <#assign date2=”9:28:20”?time(“HH:mm:ss”)> <#assign date3=” 2009-10-12 9:28:20”?time(“HH:mm:ss”)> ${date1}à结果为2009-10-12 ${date2}à结果为9:28:20 ${date3}à结果为2009-10-12 9:28:20 宏定义hash内置函数代码 Hash的内置函数 1.hash?keys 返回hash里的所有key,返回结果为sequence 2.hash?values 返回hash里的所有value,返回结果为sequence 例如: <#assign user={“name”:“hailang”, “sex”:“man”}> <#assign keys=user?keys> <#list keys as key> ${key}=${user[key]} </#list> Hash的内置函数 1. hash?keys 返回hash里的所有key,返回结果为sequence 2.hash?values 返回hash里的所有value,返回结果为sequence 例如: <#assign user={“name”:“hailang”, “sex”:“man”}> <#assign keys=user?keys> <#list keys as key> ${key}=${user[key]} </#list>
转载地址:http://blog.csdn.net/u010147288/article/details/51489896
- .ftl文件简介及语法
- .ftl文件简介及语法
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法 .
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法
- FTL常用标签及语法
- freemarker FTL常用标签及语法
- Freemaker FTL指令常用标签及语法
- (freemarker)FTL常用标签及语法
- Freemaker FTL指令常用标签及语法
- Freemaker FTL指令常用标签及语法
- Freemaker FTL指令常用标签及语法
- busybox动态库问题
- 在windows下编译tensorflow(cpu)
- 简单认识TCP/IP协议
- 微信小程序之图片上传
- js统计页面访问次数
- .ftl文件简介及语法
- Android 控制ScrollView滚动到底部
- 用Python将统计数据不存在的记录按维度对应指标补齐
- Session
- mac上查看某个端口运行的程序
- UML实践详细经典教程
- hdu4348 To the moon
- ionic2拍照和文件上传
- H5的新特性及API详解(很惊人)