Сообщение Struts2 List‹Map‹String,T›› вернуться к действию

Я использую 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] DEBUG  com.opensymphony.xwork2.interceptor.StaticParametersInterceptor debug  -> Setting static parameters {}
[75913] DEBUG  com.opensymphony.xwork2.interceptor.ParametersInterceptor debug  -> Setting params myData[0].bar => [ 112 ] myData[0].foo => [ 111 ] myData[1].bar => [ 552 ] myData[1].foo => [ 551 ] 
[75917] DEBUG  com.opensymphony.xwork2.conversion.impl.XWorkConverter debug  -> Property: CreateIfNull_myData
[75918] DEBUG  com.opensymphony.xwork2.conversion.impl.XWorkConverter debug  -> Class: com.mcw.web.actions.TestAction
[75923] WARN   com.opensymphony.xwork2.ognl.OgnlValueStack   warn  -> Error setting value
java.util.Map - Class: java.lang.ClassFile: Class.javaMethod: newInstance0 Line: 340 - java/lang/Class.java:340:-1
at com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:102)
    at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2210)
    at ognl.ASTProperty.getValueBody(ASTProperty.java:114)
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    at ognl.SimpleNode.getValue(SimpleNode.java:258)
    at ognl.ASTChain.setValueBody(ASTChain.java:222)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.Ognl.setValue(Ognl.java:737)
    ....
    Caused by: java.lang.InstantiationException: java.util.Map
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)
    at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:119)
    at com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:100)
    ... 82 more

Что мне не хватает?


person Matt W    schedule 01.06.2012    source источник
comment
Вы можете показать свои convert.properties?   -  person mprabhat    schedule 01.06.2012
comment
В настоящее время у меня нет файла свойств преобразования для действия. У меня есть «xwork-conversion.properties» для глобальных преобразований (но это пустой файл).   -  person Matt W    schedule 01.06.2012
comment
Каковы ошибки преобразования, метод no принимает массив String один? Вы пытались использовать нотацию ['foo'] для значений ключей карты в именах текстовых полей?   -  person Dave Newton    schedule 02.06.2012
comment
Предоставьте класс действия, чтобы мы могли видеть, что для myData были предоставлены как геттер, так и сеттер. Также предоставьте минимальный HTML-фрагмент, чтобы показать, что вы отправляете (IE: покажите, что вы использовали бы для жесткого кодирования трех объектов карты... одной из подходящих форм будет name=myData[0].foo и name=myData[0 ].bar, то индекс будет увеличиваться).   -  person Quaternion    schedule 02.06.2012
comment
Я добавил код для класса действия. Я также добавил часть вывода журнала, показывающую ошибку при попытке создать карту.   -  person Matt W    schedule 03.06.2012
comment
@MattW вы пытались использовать List‹HashMap‹String, Long›› myData   -  person Dev Blanked    schedule 01.05.2013


Ответы (1)


Я думаю, что ваша отправка неверна, потому что никакое значение не вернется к действию отправки, вы просто показываете данные в своем браузере, но нет данных для отправки в действие test_save, вы должны добавить некоторые входные данные, и их значения - это данные показа.

person heartneofully    schedule 09.07.2012
comment
Я отправляю данные обратно в «Test_save». - person Matt W; 12.07.2012