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