badqiu

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

          擴(kuò)展Velocity,實(shí)現(xiàn)模板的繼承

          與我之前的擴(kuò)展freemarker類似,現(xiàn)新增加三個指令:block,override,extends

          一.目的:

          • 父模板頁面定義好布局,子模板可以重定義布局中的部分內(nèi)容
          • 使模板可以實(shí)現(xiàn)類似"類"的繼承關(guān)系,并不限繼承層次

          二.繼承概欖:

          父模板: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)中的內(nèi)容。

           

          三.指令介紹:

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

          四.使用說明:

          在velocity的properties中可以設(shè)置:

          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,因?yàn)?engine.getTemplate(name) 默認(rèn)是沒有使用cache的,而#extends是需要經(jīng)常調(diào)用該函數(shù),所以必須為ResourceLoader指定開啟cache,如FileResourceLoader
          
          
          file.resource.loader.cache = true

          以上三個指令屬于rapid-framework的擴(kuò)展,后續(xù)新版本發(fā)布將包含該項(xiàng)擴(kuò)展,敬請關(guān)注。
          具體指令源碼請查看:
          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 閱讀(3466) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宾阳县| 北票市| 铜陵市| 修文县| 连城县| 石泉县| 若尔盖县| 漳平市| 木里| 融水| 蒲江县| 高陵县| 泸水县| 深水埗区| 九龙城区| 龙陵县| 东安县| 巴南区| 宣威市| 靖西县| 瑞丽市| 东方市| 海城市| 抚远县| 台湾省| 惠州市| 英超| 息烽县| 孟连| 嵊州市| 西安市| 丰镇市| 乐至县| 长沙市| 合水县| 泉州市| 衡东县| 内江市| 屏东县| 香河县| 阳曲县|