forEachとradioボタン
メーリングリストで話題になってましたが、質問者の方は
aaa | AAA | |
bbb | BBB | |
ccc | CCC |
こういう感じで選択された行を取得したいのかと思ってましたが
追加されたサンプルが
aaabbbccc |
aaabbbccc |
aaabbbccc |
こんな感じだったので、上のパターンを実現する方法を考えてみたのですが
質問者の方は下のサンプルで無事解決(?)したようなのでここにメモ。
で、考えてみたのですがJavaScriptを使わないと厳しいかなと。radioボタンをspanで囲む形式で書く(コンポーネントとして認識させる)と各行がバラバラに動いてしまって「1行」を選択するという役目を果たせないし、コンポーネントとして認識させないと値がとれないし・・・。
という訳で正攻法では無理という結論に達したのですが、ちょっと強引な方法で実現させたので以下にメモ。
HTML
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Foreach sample with radio.</title> <style type="text/css"> table.t1 { border-collapse: collapse; } table.t1 td{ border-top: outset 2px; border-left: outset 2px; height:50px; } table.t2 { border-bottom: outset 2px; border-right: outset 2px; border-collapse: collapse; } table.t2 td{ padding:0px; } </style> </head> <body> <form id="Form"> <input type="hidden" id="bbbItemsSave"/> <table class="t2"> <tr> <td> <span id="aaa" style="pageDirection" class="t1"> <input type="radio" name="aaa" value="0"/> </span> </td> <td> <table class="t1"> <tbody id="bbbItems"> <tr> <td> <span id="usrid">ユーザid</span> </td> <td> <span id="usrname">ユーザ名</span> </td> <td> <span id="usrmailaddr">メールアドレス</span> </td> <td> <span id="usrgrpname">所属グループ</span> </td> </tr> </tbody> </table> </td> </tr> </table> <input type="submit" id="doCcc" value="決定"/> </form> </body> </html>
pageクラス(getter/setterは省略)
public class ForeachRadio2Page { private int aaa; private List aaaItems; private int bbbIndex; private List bbbItems; private String usrgrpname; private String usrid; private String usrmailaddr; private String usrname; public Class initialize() { return null; } public Class doCcc() { System.out.println(bbbItems.get(aaa)); return null; } public List makeAaaItems(int forEachCount) { List ret = new ArrayList(); for (int i = 0; i < forEachCount; i++) { Map map = new HashMap(); map.put("label", ""); map.put("value", i); ret.add(map); } return ret; } public List makeBbbItems() { List ret = new ArrayList(); for (int i = 1; i <= 10; i++) { Map map = new HashMap(); map.put("usrgrpname", "usrgrpname" + i); map.put("usrid", "usrid" + i); map.put("usrmailaddr", "usrmailaddr" + i); map.put("usrname", "usrname" + i); ret.add(map); } return ret; } public Class prerender() { bbbItems = makeBbbItems(); aaaItems = makeAaaItems(bbbItems.size()); return null; } }
radioボタンとforEachを無理やり一つの表のように見せただけです。。。