Map struts 2:捕获对guava表(TreeBasedTable)的修改
有一个对象(ObjectA),其中包含另一个对象(ObjectB)。对象B中有一个Map struts 2:捕获对guava表(TreeBasedTable)的修改,map,struts2,guava,ognl,Map,Struts2,Guava,Ognl,有一个对象(ObjectA),其中包含另一个对象(ObjectB)。对象B中有一个Guava TreeBasedTable。该表有一个字符串作为行键、列键和另一个对象“ObjectC”作为值。此表已使用和标记显示在jsp上,并且显示正确(中的“值”正确,但“名称”不正确) 现在,修改时会出现问题。我们如何在action类中捕获ObjectC中修改的值 公共类ObjectA实现可序列化{ 私有整数attr1; 私人名单; //…能手和二传手。。。。 公共类ObjectB实现了可序列化{ 私有整数1
Guava TreeBasedTable
。该表有一个字符串作为行键、列键和另一个对象“ObjectC”作为值。此表已使用
和
标记显示在jsp上,并且显示正确(
中的“值”正确,但“名称”不正确)
现在,修改
时会出现问题。我们如何在action类中捕获ObjectC中修改的值
公共类ObjectA实现可序列化{
私有整数attr1;
私人名单;
//…能手和二传手。。。。
公共类ObjectB实现了可序列化{
私有整数11;
私有表所有字段;
//…能手和二传手。。。。
公共类ObjectC实现了可序列化{
私有整数111;
公共字符串属性112;
//…能手和二传手。。。。
jsp代码:
<!-- language: lang-html -->
<s:iterator value="#objB.allPlainFields.row(#rowKey)" 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>
而“allPFields”看起来像是下面的动作:
{OuterKey1=
{InnerKey1=ObjectC[attr111=31, attr112=Hi there],
InnerKey2=ObjectC[attr111=40, attr112=How are you]
}
}
上面的“allPFields”值是从IDE控制台中获取的。正如我在你的另一个问题中告诉你的,我从来没有使用过
番石榴树表
然而,根据一份报告
TreeBasedTable
,它基本上由树映射支持
问题是
V get(对象行键、对象列键)
返回与给定行键和列键对应的值,如果不存在此类映射,则返回null
在Java
中,它将是:
Object value = objA.getObjB().get(listIndex).getAllPlainFields.get(rowKey, columnKey).getAttr112;
value = "new value";
然后在OGNL
中,您可以尝试一些(完全未经测试的)方法,如:
注意:注意输入错误…您同时使用的是所有纯字段
和所有字段
。其中一个字段是错误的,请确保所有符号都指向正确的变量名
p.p.S:我不知道你的要求,但这个结构对我来说似乎有点“过度设计”…它绝对不尊重
KISS范式:)尝试了这个,但没有成功:```……不知何故,我无法使用OGNL使方法工作。当我使用方法时,对象(ObjB)作为null发送。啊……您是否在Struts.xml中禁用了动态方法调用
(如果是,请重新启用它)?您是否验证了ObjectB
中的getter是否为getAllPFields
或getAllPlainFields
?是的,动态方法调用
设置为false..我已启用它…现在让我检查一下。操作中的objB仍然为null..
呈现为
…使用行(rowkey)[columnkey]进行了尝试
同样如此。下面的代码带来了一个非空的objB
运行,但是allPlainfields
仍然是NULL
。代码:objA.objB[%{{fieldStatus.index}]。allPlainfields['%{rowKey}]['%{{fieldMap.key}].attr112
…还有什么线索吗?我了解您的复杂性陈述…我们需要在屏幕上显示一个表(地图,地图),从而选择。。。。
Object value = objA.getObjB().get(listIndex).getAllPlainFields.get(rowKey, columnKey).getAttr112;
value = "new value";
<s:textfield value="%{#fieldMap.value.attr12}"
name="objA.objB[#fieldStatus.index].allPlainFields.get(#rowKey, #fieldMap.Key).attr112" />