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] 调试 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] 警告 com.opensymphony.xwork2.ognl.OgnlValueStack 警告 -> 错误设置值
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 回答