これは少し悩んだ。mapがイテレートできればなと思いつつ、できちゃった。
1.ActionFormクラス
以下の属性およびセッター、ゲッターを用意する。
・MapのMapにして、外側のマップのキーがURLの表示文字列となる。
・内側のLinkedHashMapは、キーがクエリストリングのパラメータ、値がパラメータの値となる。
private Map<String, LinkedHashMap<String, String>> manyParamMap = null;
2.Actionクラス
適当にメソッド化
private void setMultiParamMap(ActionForm form) {
TestActionForm form = (TestActionForm) form;
Map<String, LinkedHashMap<String, String>> manyParamMap = new LinkedHashMap<String, LinkedHashMap<String, String>>();
LinkedHashMap<String, String> map1 = new LinkedHashMap<String, String>();
//パラメータをマップに詰める
map1.put(“name”, “aaa1”);
map1.put(“address”, “bbb1”);
map1.put(“age”, “ccc1”);
//リンク名をキーにしてマップを詰める
manyParamMap.put(“link001”, map1);
LinkedHashMap<String, String> map2 = new LinkedHashMap<String, String>();
//パラメータをマップに詰める
map2.put(“name”, “aaa2”);
map2.put(“address”, “bbb2”);
map2.put(“age”, “ccc2”);
//リンク名をキーにしてマップを詰める
manyParamMap.put(“link002”, map2);
LinkedHashMap<String, String> map3 = new LinkedHashMap<String, String>();
//パラメータをマップに詰める
map3.put(“name”, “aaa3”);
map3.put(“address”, “bbb3”);
map3.put(“age”, “ccc3”);
//リンク名をキーにしてマップを詰める
manyParamMap.put(“link003″, map3);
//ActionFormにセットする
form.setManyParamMap(manyParamMap);
}
3.jsp
イテレートする。
<logic:iterate id=”element” name=”TestActionForm” property=”manyParamMap”>
<bean:define id=”linkParam” name=”element” property=”value” />
<html:link action=”/TestAction” name=”linkParam”>
<%– キーの部分がリンクの表示名 –%>
<bean:write name=”element” property=”key” />
</html:link>
<br>
</logic:iterate>