yahooの知恵袋眺めてたら、JSPでList<Map>からラジオボタンを動的に作る質問を見かけて、そういえば最近Struts2で似たことやったなぁ、と思って忘れないためにメモらいず。
【やりたいこと】
List<Map<String, String>>のオブジェクトがあった時に、Mapのキーと値でラジオボタンを動的に生成したい。
アクション側はこんな感じ
Map<String, String> userProfile1 = new HashMap<String, String>(); Map<String, String> userProfile2 = new HashMap<String, String>(); // usersはgetter/setter追加 List<Map<String, String>> users = new ArrayList<Map<String, String>>(); userProfile1.put("name", "Mark"); userProfile1.put("age", "20"); userProfile1.put("code", "0001"); users.add(userProfile1); userProfile2.put("name", "Joseph"); userProfile2.put("age", "18"); userProfile2.put("code", "0002"); users.add(userProfile2);
画面側はこんな
<s:iterator value="users" status="stat"> <s:textfield name="users" type="radio" value="%{users[#stat.index]['code']}"></s:textfield> <s:property value="%{users[#stat.index]['name']}"></s:property> </s:iterator>
余談:
ListとMapをループする場合はiteratorをネストする
<s:iterator value="users" status="stat"> <s:iterator> <s:hidden name="%{key}" value="%{value}"></s:hidden> </s:iterator> </s:iterator>