badqiu

          XPer
          隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
          數據加載中……

          擴展Velocity,實現模板的繼承

          與我之前的擴展freemarker類似,現新增加三個指令:block,override,extends

          一.目的:

          • 父模板頁面定義好布局,子模板可以重定義布局中的部分內容
          • 使模板可以實現類似"類"的繼承關系,并不限繼承層次

          二.繼承概欖:

          父模板:base.vm

          <html>
          <head>
              #block("head") 
                  base_head_content 
              #end 
          </head>
          <body> 
              #block("body") 
                  base_body_content 
              #end
          </body>
          </html>

           

          子模板: child.vm

          #override("body")
              
          <div class='content'>
                  Powered By rapid-framework
              
          </div> 
          #end
          #extends("base.vm")

           

          子模板child.vm輸出

          <html>
              
          <head>
                  base_head_content 
              
          </head>
          <body> 
              
          <div class='content'>
                  Powered By rapid-framework
              
          </div> 
          </body>
          </html>

           

          可以看到,輸出中body部分被子模板重定義(override)了,而head部分則還是顯示父模板(block)中的內容。

           

          三.指令介紹:

          • #block : 定義塊,可以被子模板用#override指令覆蓋顯示
          • #override : 覆蓋#block指令顯示的內容
          • #extends : 繼承其它模板,必須放在模板的最后面(注:該指令完全等價于#parse指令,只是為了提供統一的語義,即extends比parse更好理解)

          四.使用說明:

          在velocity的properties中可以設置:

          userdirective=cn.org.rapid_framework.velocity.directive.BlockDirective,cn.org.rapid_framework.velocity.directive.OverrideDirective,cn.org.rapid_framework.velocity.directive.ExtendsDirective
          然后再初始化,即使用自定義指令:
          velocityEngine.init(properties);
          使用注意(性能):
          必須為velocity的ResourceLoader開啟cache,因為 engine.getTemplate(name) 默認是沒有使用cache的,而#extends是需要經常調用該函數,所以必須為ResourceLoader指定開啟cache,如FileResourceLoader
          
          
          file.resource.loader.cache = true

          以上三個指令屬于rapid-framework的擴展,后續新版本發布將包含該項擴展,敬請關注。
          具體指令源碼請查看:
          http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/velocity/directive/

          posted on 2009-12-28 20:55 badqiu 閱讀(3464) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 云和县| 定南县| 永定县| 浦江县| 北碚区| 都安| 尼勒克县| 乐亭县| 保亭| 措勤县| 灵川县| 古丈县| 珲春市| 呼和浩特市| 双鸭山市| 肃北| 锦屏县| 扶余县| 黔江区| 沧州市| 临颍县| 彩票| 正镶白旗| 阳朔县| 武威市| 太原市| 宁都县| 鱼台县| 华宁县| 安康市| 满城县| 大名县| 平泉县| 博乐市| 环江| 水城县| 大新县| 卢龙县| 怀仁县| 临猗县| 盐津县|