2012-06-01 37 views
0

我使用的是struts 2.1.8和ognl 2.7.3。Struts2 post列表<地圖<String,T>>回到行動

在我的動作類,我有一個字段(地圖的鑰匙:「富」,「棒」):

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 

我缺少什麼?

+0

你可以顯示你的conversion.properties? – mprabhat

+0

我目前沒有該操作的轉換屬性文件。我有一個用於全局轉換的'xwork-conversion.properties'(但它是一個空文件)。 –

+0

什麼是轉換錯誤,「沒有方法接受一個字符串數組」一個?您是否嘗試在文本字段名稱中使用'['foo']'表示地圖鍵值? –

回答

0

我認爲你的提交是錯誤的,因爲沒有值會回到提交動作,你只是在瀏覽器中顯示數據,但沒有數據提交給test_save動作,你應該添加一些輸入,它們的值是顯示數據。

+1

我正在提交數據回'Test_save'。 –

相關問題