menu
書いてる野郎
orebike@gmail.com
基本。自明の場合は name 指定はいらないが、つけないとエラーも出ず値だけなくなった状態になることがあるので、name に form を必ず指定したほうがいいだろう。
<html:text property="hoge" name="piyoForm" />
taglib のタグは柔軟性が無く、JSのライブラリ等が使う独自属性を付与することができないので
<input name="hoge" value="${ piyoForm.hoge }" />
でもいいだろう
これは別に SAStruts とはなんの関係もないんだけど、ここにのせとく
JSP 自体にはこのように書く
<html:multibox property="hoges" name="piyoForm" value="aaa" />
SAStruts で入力フォームを作るときはサーバから画面を再現する入れ物と、画面からサーバへ値を送る入れ物を同じにしておく。
今回ならば piyoForm
。値受取り用の SAStruts の Form クラスを画面出力用にも使うということ。
property 属性に指定している hoges
は PiyoForm クラスの public メンバで String 配列に設定。これはString の配列じゃないとだめっぽい
property とか name とか value とか使うタグによって意味がかなり変わるのでこういうのやめてほしい
これで hoges
が中身空っぽだったとすると
<input type="checkbox" name="hoges" value="aaa" />
という HTML に展開される。
ここでこのチェックボックスにチェックを入れてサーバーに送信すると、piyoForm.hoges
の配列に「aaa」という値が格納される。あとは勝手に取り出して煮る。
逆に piyoForm.hoges
配列に「aaa」という値を突っ込んでJSPを描画すると multibox 側が hoges 配列の中身を全部調べてくれて、自分に指定されている value と同じ物があれば自動的に checked
の状態にしてくれる。
これで受けとりとその逆の再現が相互にできるようになっている。
セレクトボックスはこのように作る
<html:select property="piyo" value="${ hogeForm.piyo }" > <c:forEach var="po" items="${ piyoOptions }"> <html:option value="${ po.val }">${ po.name }</html:option> </c:forEach> </html:select>
piyoOptions の各要素が選択肢用の値と表示用の名前を持っているとする。
po.val の値と hogeForm.piyo の値が一致するとその選択肢が選択状態(selected)になる。
このような複数選択肢系は Action 側から Enum を持ち込んで、それを使うことで Java 側と統一が取れるのでそのような Enum を Action の 内部に作っておくといいだろう。
基本はセレクトボックスと同じだが
<html:select property="piyo" value="${ hogeForm.piyo }" multiple="multiple">
このようにmultiple属性をつける
複数選択した場合formにはList<String>としてマッピングされる。
<html:radio property="hoge" value="v1" /> <html:radio property="hoge" value="v2" />
このように記述すると
<input type="radio" value="v1" name="hoge"> <input type="radio" value="v2" name="hoge">
のようなHTMLが生成される
PiyoFormに hoge プロパティが存在しその値がvalue値と一致しているとチェックが入る
<form name="hogeActionForm" method="POST" action="/sample01/hoge/"> <input type="text" name="name" value=""> <input type="submit" value="Submit" name="piyo"> <input type="submit" value="Submit" name="fuga"> <button type="submit" formaction="piyo">submit</button> <button type="submit" formaction="fuga">submit</button> </form>
input submit の name 属性値で指定するActionメソッドを起動できる。 button タグの場合はformaction(html5の仕様)属性を入れるとブラウザ側がそのアドレスへリクエストしてくれるのでこれが使える。