以前在接触PHP的时候,尝试体验过smarty模板的魅力,得知PHP模板有茫茫多,可惜经历有限,没有逐个尝试。在后来接触J2EE之后,发现java也有模板,只不过官方改名叫JSTL,功能也算够用,慢慢了解到由于解析效率和书写惯性的原因,有一套应用的比较广泛的入门级别模板叫FreeMarker,今天抓紧补补。
相比较PHP的开源,贵族气质般的java从IDE到好多插件都是收费的,于是乎就有了各种以free为前缀的东西:Jfreechart,收费的MyEclipse,IDEA等等。提到IDEA,就来气:同样一个公司出的PHPStrom开始都是不收费的。不发牢骚,好了下面正式开始。
百度之: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
先上手案例:
Welcome!
<#-- 注释部分 -->
<#-- 下面使用插值 -->
Welcome ${user} !
We have these animals:
<#-- 使用FTL指令 -->
<#list animals as being>
${being.name} for ${being.price} Euros
<#list>
从这里边能看到freemarker的基本组成部分:
- 注释 <#----->
- 数据输出 ${model.data} 、
- FTL指令 <#directivename parameter>
注释就不用说了,下面来看一个数据输出:
- 通用输出: ${expr}
- 结果为字符串值:直接输出表达式结果
- 结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数
2 .数字格式化插值:#{expr}或#{expr;format}
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/> #{x; M2} <#-- 输出2.58 -->
<#assign y=4/> #{y; M2} <#-- 输出4 -->
下面来看看常用的指令
- if指令
<#if condition>...
<#elseif condition>...
<#elseif condition>...
<#else> ...
#if>
- switch , case , default , break指令
<#switch value>
<#case refValue>...<#break>
<#case refValue>...<#break>
<#default>...
#switch>
- list, break指令
list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下:
<#list sequence as item>
...
#list>
上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量:
item_index:当前变量的索引值
item_has_next:是否存在下一个对象
也可以使用<#break>指令跳出迭代
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x_index + 1}.${x}<#if x_has_next>,
<#if x="星期四"><#break>#if>
#list>
其他比较详细的讲解可以参考http://blog.csdn.net/fhx007/article/details/7902040/
下面简单说一下在项目中如何引入
1.maven中使用的话,pom.xml中添加依赖
2.spring的配置文件 applicationContext.xml 中添加bean
0
UTF-8
0.##########
yyyy-MM-dd HH:mm:ss
true
ignore
3.springMVC配置文件 springmvc-servlet.xml 中配置
.ftl
4.控制器controller中装填数据
public class HelloWordController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest hsr
, HttpServletResponse hsr1) throws Exception {
ModelAndView mv = new ModelAndView("hello");
mv.addObject("title", "Spring MVC And Freemarker");
mv.addObject("content", " Hello world , test my first spring mvc ! ");
return mv;
}
}
5.对用view中获取数据
${title}
${content}