posts - 176, comments - 240, trackbacks - 0, articles - 7

          tpl標簽定義

          Posted on 2005-11-27 20:32 canonical 閱讀(1123) 評論(0)  編輯  收藏 所屬分類: Witrix開發平臺
              tpl自定義標簽的設計目標之一是盡量減少配置說明項. 在tpl標簽庫中, 標簽定義格式如下
              <標簽庫名稱>
                  <自定義標簽名 demandArgs="argA, argB"
                      importVars="varA, varB"
                      otherArgs="optionalArgA, optionalArgB" localScope="trueOrFalse" >

                      自定義標簽的內容, 可以是任何tpl代碼
                  </自定義標簽名>

              </標簽庫名稱>

              demandArgs中指定調用時必須給定的參數的名稱列表, importVars指定從調用環境中導入的變量的名稱列表,otherArgs指定可選參數的名稱列表. demandArgs, importVars和otherArgs這三者的集合包含了所有該自定義標簽能夠接受的參數. tpl編譯器會檢查這些調用規則是否被滿足. 在運行的時候, 未指定的可選參數會被初始化為null.

              在調用時明確的指定的變量值會覆蓋importVars導入的變量值. 例如
              <c:set var="varA" value="a" />
              <MyLib:自定義標簽名 /> // 根據importVars設定, 在此標簽內varA的值為a
              <MyLib:自定義標簽名 varA="b" /> // args設定會覆蓋importVars導入的值,因此在標簽內部 varA的值為b
              // 調用標簽完成后, varA的值恢復為a

              tpl中的參數聲明方式是非常簡化的,但是它仍然保留了最關鍵的信息:變量名稱. 而在弱類型的Expresison Language中, 變量類型本來就不重要. 與jsp tag中的標簽聲明作個對比.
               <tag>
                  <name>template</name>
                  <tagclass>edu.thu.web.tags.TemplateTag</tagclass>
                  <bodycontent>JSP</bodycontent>
                  <attribute>
                      <name>src</name>
                      <required>true</required>
                      <rtexprvalue>true</rtexprvalue>
                  </attribute>
              </tag>
              jsp tag這種標簽聲明方式非常冗長, 提供的有效信息密度很低, 而相對于tpl標簽的聲明方式所能夠提供的附加信息也沒有很大的意義. 這種設計上的問題也深深的影響到JSF等派生技術.

              localScope參數指定了此自定義標簽是否具有局部變量環境, 如果為true(缺省值),  則調用此標簽的時候會自動進行變量壓棧處理, 在標簽內部無法訪問參數列表之外的變量, 運行中所產生的臨時變量也不會影響到外部環境. tpl中的變量堆棧與webwork的ValueStack機制是有一些差異的. webwork2中的ognl語言在訪問OgnlValueStack中的對象的時候缺省采用的是一種遞歸查找機制, 即在當前環境中找不到對象, 則自動查找上一層環境中的變量. tpl中的標簽結構可以多重嵌套, 產生非常復雜的結構, 所以缺省情況下tpl標簽采用了類似于函數堆棧的設計, 在子標簽中的代碼一般情況下是無法訪問父標簽環境中的變量的(除非指定了localScope參數為true). localScope支持與importVars機制相結合之后, 我們可以實現比OgnlValueStack更加靈活也更加穩健的變量訪問策略.  

          主站蜘蛛池模板: 杭锦旗| 革吉县| 常德市| 油尖旺区| 昭苏县| 延长县| 牡丹江市| 丹江口市| 泽库县| 林口县| 淮北市| 紫金县| 美姑县| 迁西县| 磴口县| 林口县| 晋州市| 阳山县| 海宁市| 西平县| 洮南市| 宣化县| 彭山县| 凭祥市| 佛冈县| 诸暨市| 陕西省| 高淳县| 平塘县| 绥芬河市| 昭觉县| 西乌珠穆沁旗| 博爱县| 深水埗区| 宁津县| 龙里县| 营口市| 天门市| 普宁市| 宁陵县| 铜陵市|