のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

struts2でのラジオボタン動的生成について

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>