Struts 2.1.8 と ognl 2.7.3 を使用しています。
私のアクション クラスには、フィールド (マップのキー: 'foo'、'bar') があります。
public class TestAction extends ActionSupport {
private static Log log = LogFactory.getLog(TestAction.class);
private static final long serialVersionUID = -4684320206927996693L;
private List<Map<String, Long>> myData = new ArrayList<Map<String,Long>>();
public TestAction() {
super();
}
public String execute() {
Map<String,Long> obj1 = new HashMap<String,Long>();
obj1.put("foo", 111L);
obj1.put("bar", 112L);
Map<String,Long> obj2 = new HashMap<String,Long>();
obj2.put("foo", 551L);
obj2.put("bar", 552L);
myData.add(obj1);
myData.add(obj2);
return INPUT;
}
public String save() {
log.info("In save()");
log.info("--> " + CollectionUtil.dump(myData));
return SUCCESS;
}
public List<Map<String, Long>> getMyData() {
return myData;
}
public void setMyData(List<Map<String, Long>> myData) {
this.myData = myData;
}
}
JSP ページにコンテンツを表示できますが、アクションにサブミットしようとすると変換エラーが発生します。
JSP コードは次のとおりです。
<s:form action="Test_save">
<s:if test="myData != null && myData.size > 0">
<s:iterator value="myData" status="status">
<tr>
<td>
<s:textfield name="myData[%{#status.index}].foo" />
</td>
<td>
<s:textfield name="myData[%{#status.index}].bar" />
</td>
</tr>
</s:iterator>
</s:if>
<s:submit value="Submit"></s:submit>
</s:form>
ログファイルに出力される内容は次のとおりです。
[75913] デバッグ com.opensymphony.xwork2.interceptor.StaticParametersInterceptor デバッグ -> 静的パラメーターの設定 {} [75913] DEBUG com.opensymphony.xwork2.interceptor.ParametersInterceptor デバッグ -> パラメータの設定 myData[0].bar => [ 112 ] myData[0].foo => [ 111 ] myData[1].bar => [ 552 ] myData[1].foo => [551] [75917] デバッグ com.opensymphony.xwork2.conversion.impl.XWorkConverter デバッグ -> プロパティ: CreateIfNull_myData [75918] デバッグ com.opensymphony.xwork2.conversion.impl.XWorkConverter デバッグ -> クラス: com.mcw.web.actions.TestAction [75923] WARN com.opensymphony.xwork2.ognl.OgnlValueStack warn -> エラー設定値 java.util.Map - クラス: java.lang.ClassFile: Class.javaMethod: newInstance0 行: 340 - java/lang/Class.java:340:-1 com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:102) で ognl.OgnlRuntime.getProperty (OgnlRuntime.java:2210) で ognl.ASTProperty.getValueBody (ASTProperty.java:114) で ognl.SimpleNode.evaluateGetValueBody (SimpleNode.java:212) で ognl.SimpleNode.getValue (SimpleNode.java:258) で ognl.ASTChain.setValueBody (ASTChain.java:222) で ognl.SimpleNode.evaluateSetValueBody (SimpleNode.java:220) で ognl.SimpleNode.setValue (SimpleNode.java:301) で ognl.Ognl.setValue (Ognl.java:737) で .... 原因: java.lang.InstantiationException: java.util.Map java.lang.Class.newInstance0 (Class.java:340) で java.lang.Class.newInstance (Class.java:308) で com.opensymphony.xwork2.ObjectFactory.buildBean (ObjectFactory.java:119) で com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:100) で ... 82以上
私は何が欠けていますか?