freemarker 基本实践

1.freemarker在struts2里面的整合

<actionname="Action1"  class="com.abc.Action1">
    
<result type="freemarker">/fm.ftl</result>
</action>
这里没有涉及到struts2的标签的使用,如果需要使用struts2的标签可能需要额外的配置,本人对使用标签持反对意见.

2.基本的输出
基本输出: ${student.name}        (student的定义在本文末尾)
 
空值判断:${student.name?if_exists}
 
默认值:  ${student.name?default(‘xxx’)}或者${ book.name!"xxx"}
 
日期格式:${student.birthday?string('yyyy-MM-dd')}
 
数字格式:${student.age?string.number}--->20
        ${student.age?string.currency}--->
<#-- $20.00 -->
        ${student.age?string.percent}—-->
<#-- 20% -->
 
传递url的参数: 
<href='search.htm?name=${student.name?url}'>查询</a>  对于中文参数,freemarker会自动给我们编码
 
boolean值:
<#assign flag=ture />
          ${flag?string("yes","no")} 
<#-- yes -->
 
每次输出的时候最好是带个默认值,否则没有被赋值的变量就会抛出异常,那个黄黄的freemarker出错页面,真是让人看了太难过了

3 逻辑判断
a:if else 形式

<#if condition>
.
<#elseif condition2>

<#elseif condition3>
.
<#else>

<#if

b:switch 形式
<#switch value>
<#case refValue1>
     
     
<#break>
<#case refValue2>
     
     
<#break>

<#case refValueN>
     
     
<#break>
<#default>
     
</#switch>

4 循环
遍历普通list:
<#list someList as item>
 
</#list>
 
 
遍历list的前面几项:
<#assign x=3>
<#list 1..x as i>
  ${i}
</#list>
 
 
遍历map:
<#list nameMap.keySet() as name>
   ${nameMap.get(name)}
</#list>
  或者
<#list nameMap?keys as name>     
   ${nameMap.get(name)}                                     
</#list>
 
 
list排序输出:
<#list someList?sort_by(["name"]) as item>
     ${item.name}
</#list>
 按照属性name进行排序(默认升序)
 
<#list somelist?sort_by(["name"])?reverse as item>
     ${item.name}
</#list>
 按照属性name进行降序排序
 
 
 
list指令还隐含了两个循环变量:item_index:当前迭代项在所有迭代项中的位置,是数字值。
item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。
 
map 关于map的key,它必须是String,这个在一定程度上限制了后台程序对于map的表达。


5 其他指令

freemarker  大于  小于 大于等于  小于等于比较符
 
大于 gt
小于 lt
大于等于 gte
小于等于 lte
 
使用方法很简单
<#if x gt 1>
..
</#if>
 
 
struts2环境中freemarker读取后台程序的静态变量和静态方法
 
${stack.findValue("@package.ClassName@method")}
${stack.findValue("@package.ClassName@property")}


6 宏

1 基本用法
宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:
<#macro greet>
  
<font size="+2">Hello Joe!</font>
</#macro>
调用宏时,与使用freemarker的其他指令类似,只是使用@替代FTL标记中的#:
<@greet/>
 
 
2 在macro指令中可以在宏变量之后定义参数,如:
<#macro greet person>
  
<font size="+2">Hello ${person}!</font>
</#macro>
可以这样使用这个宏变量: 
<@greet person="Fred"/>
但是下面的代码具有不同的意思: 
<@greet person=Fred/>
 
这意味着将Fred变量的值传给person参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式。
 
 
宏可以有多参数,下面是一个例子:
<#macro greet person color>
  
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
可以这样使用该宏变量,其中参数的次序是无关的:
<@greet person="Fred" color="black"/>
 
 
 
可以在定义参数时指定缺省值,否则,在调用宏的时候,必须对所有参数赋值:
 
<#macro greet person color="black">
    
<font size="+2" color="${color}">Hello ${person}!</font>
 
</#macro>
注意:宏的参数是局部变量,只能在宏定义中有效。
 
 
3 在宏里嵌套内容
<#nested>指令会执行宏调用指令开始和结束标记之间的模板片断,举一个简单的例子:
<#macro border>
 
<table>
   
<tr><td>
      
<#nested>
   
</tr></td>
 
</table>
</#macro>
执行宏调用:
<@border>The bordered text</@border >

posted on 2010-07-08 15:37 nod0620 阅读(9471) 评论(1)  编辑  收藏

评论

# re: freemarker 基本实践 2014-09-13 12:34 zuidaima

freemarker demo教程源代码下载:http://zuidaima.com/share/kfreemarker-p1-s1.htm  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2014年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜