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  >


转自:http://www.blogjava.net/nod0620/articles/325561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker是一个用于生成HTML Web页面的模板引擎。它被设计用于将视图从业务逻辑中分离,通过模板来生成页面并展示数据。虽然FreeMarker具有一些编程能力,但通常由Java程序准备要显示的数据,然后由FreeMarker生成页面。它不是一个Web应用框架,而是适合作为Web应用框架的一个组件。FreeMarker与容器无关,可以应用于非Web应用程序环境。它更适合作为Model2框架(如Struts)的视图组件,也可以在模板中使用JSP标记库。FreeMarker具有强大的模板语言,支持常用的指令、循环结构、变量定义和复杂表达式等。它还提供了通用数据模型,可以方便地处理各种数据。\[2\] 在使用FreeMarker时,可以在webapp目录下创建template文件夹,并在其中创建模板文件。模板文件使用HTML标签和FreeMarker注释语法来定义页面结构和逻辑。可以通过${}语法来引用数据并在页面中展示。\[3\] 要启动使用FreeMarker的项目,需要在项目的依赖中添加FreeMarker的相关配置。可以在pom.xml文件中添加如下依赖配置: ```xml <dependency> <groupId>org.FreeMarker</groupId> <artifactId>FreeMarker</artifactId> <version>2.3.29</version> </dependency> ``` 这样就可以在项目中使用FreeMarker来生成页面了。\[1\] #### 引用[.reference_title] - *1* [FreeMarker简介及使用示例](https://blog.csdn.net/qq_39326472/article/details/131264082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [FreeMarker详细介绍](https://blog.csdn.net/weixin_44454512/article/details/109877418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值