论坛首页 Java企业应用论坛

Freemarker是个好东西

浏览 12958 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-09  
yn5411 写道
唯一遗憾的就是不支持null,而很多时候却是需要的。
如果要用的话,只能改源码了。


<#if param ??>
</#if>


0 请登录后投票
   发表时间:2012-03-10   最后修改:2012-03-10
string2020 写道
除了生成文件这一点,比JSP强大在哪


el的标签少,功能少,而fm你看看内置多少方法就知道它的功能强大了,如果还不够用可以自定义一个方法或一个宏,类似于jsp标签,jsp只能生成html代码,而fm是个纯粹模板技术,不关心生成的结果是html还是什么,它生成的只是文本,比如你可以用它来生成一个email内容发送给客户。

还有<#t>,<#noparse>这类方便的标签,做代码生成工具,它是很合适的工具,还有velocity,没用过,不知怎么样。简单的说就是jsp有的功能fm都有,而fm有的,jsp很多都没有。
0 请登录后投票
   发表时间:2012-03-10  
lfrick 写道
JSP也是可以生成文件的。

你在开玩笑吧。怎么生成?
0 请登录后投票
   发表时间:2012-03-10  
nathanleewei 写道
yn5411 写道
唯一遗憾的就是不支持null,而很多时候却是需要的。
如果要用的话,只能改源码了。


<#if param ??>
</#if>




就是这么用。没有<#if a==null>这样用的。不知为什么fm要这样来实现。

fm很好的一点就是多年来一直在保持更新,不像velocity,很久没更新了吧。
0 请登录后投票
   发表时间:2012-03-10  
EXvision 写道
FreeMarker大幅提高表现层的开发效率。这还不够么?

同时强制性的驱逐了表现层的可能包含的业务逻辑,在团队开发也有足够的优势了吧。

用过就知道了。会彻底痛恨JSP、JSTL、EL之流的。哈哈哈~


如果表现层有很多业务逻辑,那是你们程序写得不好。jsp用来显示结果,足够用了。
0 请登录后投票
   发表时间:2012-03-10  
对我来说 freemarker的List和IF就完全够用了..
0 请登录后投票
   发表时间: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模板。
0 请登录后投票
   发表时间:2012-03-10  
和velocity差不多。估计比velocity稍微强大一点。
0 请登录后投票
   发表时间:2012-03-10  
fm除了对null的处理,其他的都好多了,但就是这个null对象和null属性的处理,简直破坏了很多便利性 ,别提什么if了,那个玩意你需要在页面写多少冗余判断,而jstl只需要用内置操作符${empty obj ?'':''},fm 也不支持三元操作,如果一个对象传过来,你使用了没有赋值的属性,就是说属性值是null,你就等着看全屏黄色警报吧,jstl这点就人性话多了!
0 请登录后投票
   发表时间: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>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics