锁定老帖子 主题:Freemarker是个好东西
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-09
yn5411 写道 唯一遗憾的就是不支持null,而很多时候却是需要的。
如果要用的话,只能改源码了。 <#if param ??> </#if> |
|
返回顶楼 | |
发表时间:2012-03-10
最后修改:2012-03-10
string2020 写道 除了生成文件这一点,比JSP强大在哪
el的标签少,功能少,而fm你看看内置多少方法就知道它的功能强大了,如果还不够用可以自定义一个方法或一个宏,类似于jsp标签,jsp只能生成html代码,而fm是个纯粹模板技术,不关心生成的结果是html还是什么,它生成的只是文本,比如你可以用它来生成一个email内容发送给客户。 还有<#t>,<#noparse>这类方便的标签,做代码生成工具,它是很合适的工具,还有velocity,没用过,不知怎么样。简单的说就是jsp有的功能fm都有,而fm有的,jsp很多都没有。 |
|
返回顶楼 | |
发表时间:2012-03-10
lfrick 写道 JSP也是可以生成文件的。
你在开玩笑吧。怎么生成? |
|
返回顶楼 | |
发表时间:2012-03-10
nathanleewei 写道 yn5411 写道 唯一遗憾的就是不支持null,而很多时候却是需要的。
如果要用的话,只能改源码了。 <#if param ??> </#if> 就是这么用。没有<#if a==null>这样用的。不知为什么fm要这样来实现。 fm很好的一点就是多年来一直在保持更新,不像velocity,很久没更新了吧。 |
|
返回顶楼 | |
发表时间:2012-03-10
EXvision 写道 FreeMarker大幅提高表现层的开发效率。这还不够么?
同时强制性的驱逐了表现层的可能包含的业务逻辑,在团队开发也有足够的优势了吧。 用过就知道了。会彻底痛恨JSP、JSTL、EL之流的。哈哈哈~ 如果表现层有很多业务逻辑,那是你们程序写得不好。jsp用来显示结果,足够用了。 |
|
返回顶楼 | |
发表时间:2012-03-10
对我来说 freemarker的List和IF就完全够用了..
|
|
返回顶楼 | |
发表时间:2012-03-10
theoffspring 写道 lfrick 写道 JSP也是可以生成文件的。
你在开玩笑吧。怎么生成? public class TestServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 5222793251610509039L; @Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { genStaticPage("c:/tpl/a.jsp", "c:/html/a.html", req,res); } /* * 生成静态页面 */ private void genStaticPage(String templatePath, String destPath, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ FileOutputStream fos = new FileOutputStream(destPath); ServletResponseToFileWrapper resWrapper = new ServletResponseToFileWrapper(response, fos); request.getRequestDispatcher(templatePath).include(request, resWrapper); fos.close(); } } public class ServletResponseToFileWrapper extends HttpServletResponseWrapper { private CharArrayWriter charWriter; private FileOutputStream fos; public ServletResponseToFileWrapper(HttpServletResponse response, FileOutputStream fos) { super(response); charWriter = new CharArrayWriter(); this.fos = fos; } public PrintWriter getWriter() throws IOException { System.out.println("Wrapper getWriter() 被调用了!"); return new PrintWriter(charWriter); } public String toString() { return charWriter.toString(); } public char[] toCharArray(){ return charWriter.toCharArray(); } public ServletOutputStream getOutputStream() throws IOException { return new ServletOutputStreamToFileProxy(fos); } } public class ServletOutputStreamToFileProxy extends ServletOutputStream { private final FileOutputStream fileOutputStream; public ServletOutputStreamToFileProxy(FileOutputStream fos) { this.fileOutputStream = fos; } public void write(int b) throws IOException { fileOutputStream.write(b); } } 我觉得,freemarker和jsp最大的区别是:前者是java模板,而后者只是servlet模板。 |
|
返回顶楼 | |
发表时间:2012-03-10
和velocity差不多。估计比velocity稍微强大一点。
|
|
返回顶楼 | |
发表时间:2012-03-10
fm除了对null的处理,其他的都好多了,但就是这个null对象和null属性的处理,简直破坏了很多便利性 ,别提什么if了,那个玩意你需要在页面写多少冗余判断,而jstl只需要用内置操作符${empty obj ?'':''},fm 也不支持三元操作,如果一个对象传过来,你使用了没有赋值的属性,就是说属性值是null,你就等着看全屏黄色警报吧,jstl这点就人性话多了!
|
|
返回顶楼 | |
发表时间:2012-03-10
最后修改:2012-03-10
kjj 写道 fm除了对null的处理,其他的都好多了,但就是这个null对象和null属性的处理,简直破坏了很多便利性 ,别提什么if了,那个玩意你需要在页面写多少冗余判断,而jstl只需要用内置操作符${empty obj ?'':''},fm 也不支持三元操作,如果一个对象传过来,你使用了没有赋值的属性,就是说属性值是null,你就等着看全屏黄色警报吧,jstl这点就人性话多了!
freemarker: 如果obj非null,则打印obj,否则打印"object is null object" ${obj?default('object is null object')} 逻辑判断 <#if object?exists> print something </#if> |
|
返回顶楼 | |