0

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以上

私は何が欠けていますか?

4

1 に答える 1

0

あなたの送信は間違っていると思います。送信アクションに値が返されないため、ブラウザーにデータを表示するだけですが、test_save アクションに送信するデータがないため、いくつかの入力を追加する必要があり、それらの値は表示データです。

于 2012-07-09T08:47:57.617 に答える