【发布时间】:2013-02-19 13:42:16
【问题描述】:
第 1 部分: 有一个对象 (ObjectA) 具有另一个对象 (ObjectB)。对象 B 中有一个 Hashmap。这个 hashmap 有一个字符串作为键,另一个对象“ObjectC”作为值。此哈希图已使用 s:iterator 和 s:textfield 显示在 jsp 上,并且显示正确。即 s:textfield 中的“值”是正确的,但“名称”不是。 现在,修改文本字段时出现问题。我们如何在动作类的 ObjectC 中捕获修改后的值?
public class ObjectA implements Serializable {
private Integer attr1;
private List<ObjectB> objB;
//...getters and setters....
public class ObjectB implements Serializable {
private Integer attr11;
private Map<String,ObjectC> myMap;
// ...getters and setters....
public class ObjectC implements Serializable {
private Integer attr111;
public String attr112;
// ...getters and setters....
jsp代码:
<s:iterator value="#objB.myMap" var="fieldMap" status="fieldStatus">
<li><label><s:property value="#fieldMap.key"/></label><span>
<s:textfield name="<NOT SURE>" value="%{#fieldMap.value.attr12}" /></span></li>
</s:iterator>
【问题讨论】:
-
通过提交表单?不确定问题是什么——您是说您在表单中使用了正确的符号但它不起作用?
-
@Dave jsp 代码已添加到问题中。该值正在正确显示,但是当将相同的表达式放在“名称”属性中时,当使用修改后的值提交表单时,该值不会出现在操作中
-
名字就是名字;您需要在对象图之后为其命名:OGNL 所做的只是将表达式转换为调用。它无法知道
fieldMap实际上不是一个名为fieldMap的属性。 -
那么名字应该是objA.objB.myMap('%{#fieldMap.key}').attr112 吗?
-
戴夫,感谢您对此进行调查。