锁定老帖子 主题:Freemarker是个好东西
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-08
最后修改:2012-03-09
最近用freemarker做一个代码生成工具,以减少工作量,因为我们项目中开发已经格式化了、固定化了,为什么还要完全自己写呢。fm用起来尽管有不方便的地方,但功能确实挺强大的,下面分享一下我在使用中遇到的问题。 1.先说说常用的函数吧 html
: 将特殊html标记进行转换,如<转换成<
fm的函数调用语法是变量名后面跟一个问号,再写上方法名,如:${test?upper_case} 如果要调用2个以上的内置方法,则连续写,如:${test?upper_case?html}
2.自定义方法 有时候内置的方法无法满足你的特殊需求,怎么办?实现TemplateMethodModelEx接口,使用方法 Object exec(List list),下面是一个取模板里变量类名的方法: public class GetClsNameTMM implements TemplateMethodModelEx{ private final static Log log= LogFactory.getLog(GetClsNameTMM.class); public Object exec(List list) throws TemplateModelException { if (list.size()!=1){ return new TemplateModelException("wrong param number, must be 1!"); } String name = list.get(0).class.toString(); log.debug("class name of '"+list.get(0)+"' is '"+name+"'"); return name; } } 在java中定义参数map的时候: root.put("nameOfClass", new GetClsNameTMM()); 然后在模板里如下调用: nameOfClass(${someVar})
3.如何取得变量类名 如果是javabean,可以通过“变量.class.simpleName”或“变量.class.name”,但对于String这样的内置java类则得不到,原因是变量在模板中并不是原始的类型,fm会为每种类型选择一个合适的包装器,如果你想任意类型的变量都能取到类名,做进一步的判断,唯一的选择是2中提供的方法--定义一个方法,实现TemplateMethodModelEx
4.删除连续多个变量之间的换行符 设想这样一个应用场景,你想生成一个java方法的代码,方法的参数是多个的,你一定不希望它是一行一个参数吧,那你就需要使用<#t>标签了,它的意思是去掉当前行首尾的空白,注意,换行也当成空白,当初看文档的时候不知道这一点,所以忽略了,好一顿google才找到答案。比如下面的例子: 1 <#t> 2<#t> 3<#lt> 4 5<#rt> 6 执行后的结果是: 写道
1 23
4 5 6 <#t>在行里的位置无所谓,类似还有<#lt><#rt>,意思是去掉左侧和右侧的空白。
5.如何判断变量是否存在或对象的属性是否为null 用??进行判断,如下:
6.如何输出${xxx} 这样的字符串
jsp el的语法和fm很像,都支持${}这样来输出变量内容,当然jsp本身其实也是一种模板技术,二者本质是一样的,你如果想生成jsp el的代码就会遇到这个问题,不能直接写,否则fm会把它当成fm的东西来解析成它变量了,这时候需要使用<#noparse>标签。
<#noparse>${ccc}</#noparse> 这样fm就不会把它当成变量来解析而是直接输出 ${ccc} 了
还有其它很多功能就不说了,很容易在文档中找到,以上只是一些比较重要而且不容易找到答案的地方。看懂此文需要你有一定的fm使用经验,否则你意识不到此文的价值。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-09
更新了一下
|
|
返回顶楼 | |
发表时间:2012-03-09
感觉freemarker,velocity跟jstl,el都是一样的东西
|
|
返回顶楼 | |
发表时间:2012-03-09
比jsp要强大得多,而且最重要的,能生成文件啊
|
|
返回顶楼 | |
发表时间:2012-03-09
最后修改:2012-03-09
除了生成文件这一点,比JSP强大在哪
|
|
返回顶楼 | |
发表时间:2012-03-09
string2020 写道 除了生成文件这一点,比JSP强大在哪
我也想知道 |
|
返回顶楼 | |
发表时间:2012-03-09
唯一遗憾的就是不支持null,而很多时候却是需要的。
如果要用的话,只能改源码了。 |
|
返回顶楼 | |
发表时间:2012-03-09
JSP也是可以生成文件的。
|
|
返回顶楼 | |
发表时间:2012-03-09
FreeMarker大幅提高表现层的开发效率。这还不够么?
同时强制性的驱逐了表现层的可能包含的业务逻辑,在团队开发也有足够的优势了吧。 用过就知道了。会彻底痛恨JSP、JSTL、EL之流的。哈哈哈~ |
|
返回顶楼 | |
发表时间:2012-03-09
weng 写道 string2020 写道 除了生成文件这一点,比JSP强大在哪
我也想知道 no compile |
|
返回顶楼 | |