【问题标题】:Struts 2 - Saving value in map inside a mapStruts 2 - 在地图内的地图中保存价值
【发布时间】:2013-05-20 13:33:39
【问题描述】:

我目前正在使用 Struts 2,我遇到了这种情况:

在我的动作类中:

private Map<String, Map<Integer, MyEntity>> map; 

public void setMap(Map<String, Map<Integer, MyEntity>> map) { 
      this.map = map; 
} 

public Map<String, Map<Integer, MyEntity>> getMap() { 
      return this.map; 
} 

在我的 JSP 中,我使用迭代器通过“key”变量遍历映射,然后遍历另一个列表(整数)并使用该整数遍历第二个映射,如下所示:map[${key}][${myInteger}]

<s:iterator value="map" status="status"> 
  <tr> 
    <td>${status.index}</td> 
    <td>${key}</td> 
    <s:iterator value="integersList" id="myInteger"> 
      <td> 
        <s:textfield name="map[${key}][${myInteger}].myEntityAttribute" value="%{map[#attr.key][#attr.myInteger].myEntityAttribute}" id="attr_${key}_${myInteger}" theme="simple" size="10" /> 
      </td> 
    </s:iterator> 
  </tr> 
</s:iterator>

这样做是为了获得价值工作正常:value="%{map[#attr.key][#attr.myInteger].myEntityAttribute}"

但是当我想保存更改时,我无法让它工作:name="map[${key}][${myInteger}].myEntityAttribute"

我不知道我做错了什么,或者如果这不能做到(我很确定一定有办法),但我有点厌倦了尝试。

我会很感激任何建议,真的,任何可以提供帮助的东西都是受欢迎的。

【问题讨论】:

  • 看到这个问题的答案:stackoverflow.com/q/15006868/1700321
  • 你为什么确定,你尝试了什么?
  • 感谢 Aleksandr,通过这些答案,我意识到 OGNL 的一些限制。我想做的事情是不可能的,所以我必须找到另一种方法。
  • @johncol:确切地说,这不是 OGNL 限制,而是 Struts2 中的 OGNL 限制。

标签: java loops dictionary struts2 type-conversion


【解决方案1】:

简而言之,Struts 默认类型转换器又名XWorkConverter 是不可能的。它正在寻找 bean 属性来执行它们的转换。

还支持集合转换,还有一个CollectionConverter,您可以使用它来处理像您这样的集合。

为此,您应该为xwork-conversion.properties 中的相应集合类配置转换器。它是 struts 转换器使用的转换的全局属性。如果您不这样做,Struts 转换器将使用ognl.ConvertionNotSupported 异常来影响您的字段。您可以通过为您转换的类型放置自己的类型转换器来解除它。

【讨论】:

  • 我会试试的。感谢您的信息。
猜你喜欢
  • 2020-11-14
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多