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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 澜沧| 重庆市| 七台河市| 巴里| 丹巴县| 朝阳区| 南汇区| 诸暨市| 客服| 疏勒县| 青铜峡市| 阿拉善右旗| 贵阳市| 连云港市| 垣曲县| 浏阳市| 界首市| 河池市| 安徽省| 那坡县| 和平区| 启东市| 自治县| 贺兰县| 额济纳旗| 吉水县| 盐亭县| 成都市| 石嘴山市| 辛集市| 定襄县| 连云港市| 舒城县| 曲阜市| 社旗县| 婺源县| 涿州市| 肇源县| 读书| 丰原市| 禄丰县|