velocity中使用evaluate指令動態解析屬性
struts2裡有select標籤,可以方便的生成html的select元素.
用velocity以後,怎麼用select標籤呢
第一,可以用#sselect.事實上,在velocity頁面中,可以使用#s的字首來使用struts2的標籤
詳情見[url]http://struts.apache.org/release/2.3.x/docs/velocity-tags.html[/url]
第二,用velocity的巨集來實現自定義元件.
先考慮一個普通java類Bar,有foo和bar兩個屬性,在velocity中訪問這兩個屬性,可以用
$bar.foo
$bar.bar
但是如何能動態指定要訪問的屬性呢?
evaluate指令可以用來在執行時動態解析模板語言.
#set($prop="bar")
#evaluate("\$bar.$prop")
#set($prop="foo")
#evaluate("\$bar.$prop")
其中"\"用來轉義"$"
下面用巨集來組成一個自定義的select元素
#macro (fooList $list $name $listKey $listValue $headerKey $headerValue)
#set($currentValueExpression = "$$name")
#set($currentValue = "#evaluate($currentValueExpression)")
<select name="$name">
#if( $headerKey && $headerValue )
<option value="$headerKey">$headerValue</option>
#end
#foreach( $v in $list )
#set($dynamicValueExpression = "\$v.$listValue")
#set($dynamicKeyExpression = "\$v.$listKey")
#set($dynamicKey = "#evaluate($dynamicKeyExpression)")
<option value="$dynamicKey"
#if( $dynamicKey == $currentValue )
selected="selected"
#end>
#evaluate($dynamicValueExpression)</option>
#end
</select>
#end
這樣來呼叫這個巨集,產生類似於struts2 select標籤的效果
#fooList($barList "currentBarId" "fooId" "fooName")
最後吐槽下velocity的文件,它說呼叫巨集的時候,傳遞的引數個數必須和定義時一致
[quote]
when the Velocimacro is invoked, it must be called with the same number of arguments with which it was defined
[/quote]
那現在如果我硬少幾個引數,照樣能呼叫,也不報錯,那個"must"真是莫大的諷刺....
用velocity以後,怎麼用select標籤呢
第一,可以用#sselect.事實上,在velocity頁面中,可以使用#s的字首來使用struts2的標籤
詳情見[url]http://struts.apache.org/release/2.3.x/docs/velocity-tags.html[/url]
第二,用velocity的巨集來實現自定義元件.
先考慮一個普通java類Bar,有foo和bar兩個屬性,在velocity中訪問這兩個屬性,可以用
$bar.foo
$bar.bar
但是如何能動態指定要訪問的屬性呢?
evaluate指令可以用來在執行時動態解析模板語言.
#set($prop="bar")
#evaluate("\$bar.$prop")
#set($prop="foo")
#evaluate("\$bar.$prop")
其中"\"用來轉義"$"
下面用巨集來組成一個自定義的select元素
#macro (fooList $list $name $listKey $listValue $headerKey $headerValue)
#set($currentValueExpression = "$$name")
#set($currentValue = "#evaluate($currentValueExpression)")
<select name="$name">
#if( $headerKey && $headerValue )
<option value="$headerKey">$headerValue</option>
#end
#foreach( $v in $list )
#set($dynamicValueExpression = "\$v.$listValue")
#set($dynamicKeyExpression = "\$v.$listKey")
#set($dynamicKey = "#evaluate($dynamicKeyExpression)")
<option value="$dynamicKey"
#if( $dynamicKey == $currentValue )
selected="selected"
#end>
#evaluate($dynamicValueExpression)</option>
#end
</select>
#end
這樣來呼叫這個巨集,產生類似於struts2 select標籤的效果
#fooList($barList "currentBarId" "fooId" "fooName")
最後吐槽下velocity的文件,它說呼叫巨集的時候,傳遞的引數個數必須和定義時一致
[quote]
when the Velocimacro is invoked, it must be called with the same number of arguments with which it was defined
[/quote]
那現在如果我硬少幾個引數,照樣能呼叫,也不報錯,那個"must"真是莫大的諷刺....
相關文章
- C#中屬性的解析C#
- C#-----ExpandoObject動態屬性C#Object
- PHP動態屬性和stdclassPHP
- 三、動態繫結屬性
- iOS動畫 屬性屬性解析iOS動畫
- VueJs中動態更改svg的相關屬性VueJSSVG
- Velocity中使用SSI指令有衝突
- Laravel 動態屬性的實現Laravel
- iOS使用shell指令碼批量修改屬性iOS指令碼
- 動態修改input元素type屬性值
- JavaScript私有屬性和靜態屬性JavaScript
- 靜態屬性
- SpringBoot中根據屬性動態註冊Spring BeanSpring BootBean
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- Velocity指令碼入門教程指令碼
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- python實現在類中動態新增屬性和生成物件Python物件
- JS/JQ動態建立(新增)optgroup和option屬性JS
- JavaScript如何動態修改img的src屬性值JavaScript
- javascript如何動態刪除或者新增物件屬性JavaScript物件
- jQuery動態建立html元素並設定屬性jQueryHTML
- 動態生成HTML元素併為元素追加屬性HTML
- jQuery動態修改連結的href屬性值jQuery
- vgchange指令:修改卷組屬性GC
- groovy之動態指令碼的使用指令碼
- 使用expect執行動態指令碼指令碼
- [譯] 繼承 JavaScript 類中的靜態屬性繼承JavaScript
- TypeScript 類靜態屬性TypeScript
- [React]屬性和狀態React
- 不使用反射進行C#屬性的執行時動態訪問反射C#
- Vue元件中prop屬性使用說明Vue元件
- vue例項中watch屬性的使用Vue
- Python學習之路38-動態建立屬性Python
- v-bind 動態更新 HTML 元素上的屬性HTML
- IOS Objective-C屬性解析iOSObject
- Unity3D指令碼屬性Unity3D指令碼
- Windows常用屬性開啟指令 (轉)Windows
- Angular (四) | 創造屬性指令-15Angular