slim3やSAStrutsとVelocityを組み合わせて使うときに便利なマクロ集
input normal
<input type="text" name="hoge1" value="$!form.bean.hoge1" />
↓
<input type="text" name="#i('hoge1')" />
こう書くためのマクロ。
## input normal #macro (i $name) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${name}" value="$!__value#end
checkbox (booleanなcheckbox)
<input type="checkbox" name="checkbox1" value="on" #if($checkbox1)checked="checked"#end />
↓
<input type="checkbox" name="#checkbox('checkbox1')" />
こう書くためのマクロ。
## input checkbox #macro (checkbox $name) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${name}" value="on#if($!__value)" checked="checked#end#end
multibox (同じnameを持ち値が配列に格納されるcheckbox)
foreach($m in $multiboxItems) <input type="checkbox" name="#multibox('multibox' $m.value)" />$esc.html($m.label) #end
こう書くためのマクロ。(checkedとかを自動的につける。)
## input multibox #macro (multibox $name $value) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${name}" value="$!{value}#if($array.contains($__value, $value))" checked="checked#end#end
※$arrayはtoolbox.xmlに適当に追加したもの。
public class ArrayTool { public boolean contains(Object[] ar, Object v) { return ArrayUtils.contains(ar, v); } }
radio
<input type="radio" name="#radio('radio' '1')" />One <input type="radio" name="#radio('radio' '2')" />Two <input type="radio" name="#radio('radio' '3')" />Three
こう書くためのマクロ。
## input radio #macro (radio $name $value) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${name}" value="${value}#if(${__value} == ${value})" checked="checked#end#end
select
<select name="select"> <option value="">選択してください</option> <option value="#select('select' '1')">One</option> <option value="#select('select' '2')">Two</option> <option value="#select('select' '3')">Three</option> </select>
こう書くためのマクロ。
## input select #macro (select $name $value) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${value}#if(${__value} == ${value})" selected="selected#end#end
multiselect
<select name="multiselect" multiple="true" size="3"> <option value="#multiselect('multiselect' '1')">One</option> <option value="#multiselect('multiselect' '2')">Two</option> <option value="#multiselect('multiselect' '3')">Three</option> </select>
こう書くためのマクロ。
## input multiselect #macro (multiselect $name $value) #set($__form = '') #set($__form = $context.get($form.name)) #set($__value = '') #set($__value = $__form.get($name)) ${value}#if($array.contains(${__value}, ${value}))" selected="selected#end#end
cycle
foreachの中で使用。例えば1行ごとに背景を変えたい場合など。
<tr style="background-color:#cycle('pink' 'yellow')">
## cycle #macro (cycle $a $b) #if(${velocityCount} % 2 == 0)${a}#else${b}#end #end