7. Velocityでのリクエストパラメータの再表示

エラー時などにリクエストパラメータを入力欄に再表示する方法です。
とりあえずはVelocityの機能でやります。

単純なリクエストパラメータの場合

parameter.vmを編集

$の後に!を付けると変数がnullの場合は空白が出力されます。

リクエストパラメータ:$word
<form action="parameter.action">
    <input type="text" name="word" value="$!word" />
    <input type="submit" value="実行" />
</form>

可変リクエストパラメータの場合

MultiInputFieldActionを編集

Velocityでは配列の要素に直接アクセスできないので、Action側でListの要素を取り出すメソッドを用意します。
(#foreachで配列の中身を走査することは可能です)

public Object getValue(int i) {
    return value.get(i);
}
multiinputfield.actionを編集

getValueメソッドを使って配列の要素を取り出して表示しています。

<form action="multiinputfield.action" method="POST">
<table>
<tr><th>checkbox</th><th>text</th><th>select</th></tr>
#foreach ( $item in [1..3] ) 
#set($num = $item - 1)
<tr>
<td><input type="checkbox" name="value[$num].check" value="true" ) #if($action.getValue($num).check) checked #end/></td>
<td><input type="text" name="value[$num].text" value="$!action.getValue($num).text"/></td>
<td>
    <select name="value[$num].select">
        <option #if($action.getValue($num).select == "A") selected #end>A</option>
        <option #if($action.getValue($num).select == "B") selected #end>B</option>
        <option #if($action.getValue($num).select == "C") selected #end>C</option>
    </select>
</td>
</tr>
#end
</table>
<input type="submit" value="実行" />
</form>