论坛首页 Java企业应用论坛

Struts2+Freemarker 实现Django模板继承功能

浏览 3614 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-17  
最近在学习Django,对它的模板继承功能爱不释手,相比以前的使用过的Sitemesh来说,其功能、灵活性、易用性、复用性都比sitemesh高出一大截。
于是结合struts2+Freemarker做过的项目进行思考,原来用struts2+Freemarker也可以轻松做到Django模板的功能,几天试用下来,那不是一般的爽,sitemesh暂时放一边去吧。
以一个例子来说明
1. 首先定义模板,假设路径为: /webapps/exam/base.ftl, 定义基本布局
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <title><@title/></title>
 </head>

 <body>
<h1>Welcom</h1>
  
 <#if content?exists>
      <@content/>
</#if>

<#if images?exists>
	<@images/>
</#if>

<#if comment?exists>
     <@comment/>
</#if>
<p>
<hr/>
2003-2008 xxx.com. All rights reserved. 
</p>
 </body>
</html>


分为头、正文内容区域、图片区域、评论区域、尾,这是一个很简单的布局
2. 写一个简单的页面来测试,路径:/webapps/exam/simple.ftl,内容如下
<#include "/exam/base.ftl"/>

<#macro title>
测试
</#macro>

<#macro content>
蒂皮出版的《我的野生动物朋友》一书中,配有她的父母现场拍摄的130多幅照片,展现小女孩与各种凶残的非洲野生动物毫无顾忌玩耍的情景。这本书的广告称,这是又一个“狼孩”故事。
</#macro>

<#macro comment>
<hr>
<p>用户评论</p>
<p>
Tom Say: very good
</p>
</#macro>

这个简单页面就完成了,在simple.ftl中我们不关心布局,爱怎么摆就怎么摆,浏览器中可以看到效果了。
3. 通过继承增强simple.ftl
现在用户的需求来了,要在书籍介绍下显示插图,可以直接修改上面的simple.ftl来实现,另外我们来看看继承simple.ftl来实现这个需求,添加一个文件:/webapps/exam/image-book.ftl,内容如下:
<#include "/exam/simple.ftl"/>

<#macro images>
<p>
<img src='http://img2.cache.netease.com/cnews/2008/11/17/20081117095448372ff.jpg'/>
</p>
</#macro>


现在来看看,很好,已经在原来的页面上加上了图片。

这个例子非常简单,只是为了说明如何实现模板继承,应用场景应该很多。项目中正在用,感觉很方便。
   发表时间:2008-11-18  
这个不叫继承吧?? 顶多叫聚合, freemarker的弱点也很明显,不直观,非到运行时才可看到效果。
0 请登录后投票
   发表时间:2009-06-25  
FreeMarker, 很好很强大
0 请登录后投票
   发表时间:2009-06-26  
没怎么用过FREEMARKER,有个问题,如果你的2个相同的元素,比如出现2个IMAGE,父页面怎么区分啊?直接连续输出2个?我要在不同位置输出这2个图片怎么处理呢?
1 请登录后投票
论坛首页 Java企业应用版

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