Jsp Struts2将对象内的贴图绑定到动作属性
第1部分: 有一个对象(ObjectA)具有另一个对象(ObjectB)。对象B中有一个Hashmap。这个Hashmap有一个字符串作为键,另一个对象“ObjectC”作为值。这个hashmap已经使用s:iterator和s:textfield显示在jsp上,并且显示正确。i、 e.s:text字段中的“值”正确,但“名称”不正确。 现在,修改textfield时会出现问题。我们如何在action类中捕获ObjectC中修改的值Jsp Struts2将对象内的贴图绑定到动作属性,jsp,struts2,ognl,Jsp,Struts2,Ognl,第1部分: 有一个对象(ObjectA)具有另一个对象(ObjectB)。对象B中有一个Hashmap。这个Hashmap有一个字符串作为键,另一个对象“ObjectC”作为值。这个hashmap已经使用s:iterator和s:textfield显示在jsp上,并且显示正确。i、 e.s:text字段中的“值”正确,但“名称”不正确。 现在,修改textfield时会出现问题。我们如何在action类中捕获ObjectC中修改的值 公共类ObjectA实现可序列化{ 私有整数attr1; 私人
公共类ObjectA实现可序列化{
私有整数attr1;
私人名单;
//…能手和二传手。。。。
public类ObjectB实现可序列化{
私有整数11;
私人地图myMap;
//…能手和二传手。。。。
public类ObjectC实现可序列化{
私有整数111;
公共字符串属性112;
//…能手和二传手。。。。
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>
在您的例子中,objB是一个列表
包含一个哈希映射
,然后是一个哈希映射
,用于列表
的每个元素
objA
|--- objB[0]
|-- objC[A]
|-- objC[B]
|-- objC[C]
|--- objB[1]
|-- objC[X]
|-- objC[Y]
|-- objC[Z]
|--- objB[n]
|-- objC[N1]
|-- objC[N2]
|-- objC[N3]
然后,您需要两个迭代器和以下OGNL
符号来引用具有name
属性的单个元素:
<s:iterator value="objA.objB" var="listRow" status="listStatus">
<!-- Iterating the List -->
<s:iterator value="#listRow.myMap" var="mapRow" >
<!-- Iterating the Map -->
<li>
<label>
<s:property value="#mapRow.key"/>
</label>
<span>
<s:textfield value="%{#mapRow.value.attr12}"
name="objA.objB[#listStatus.index].myMap[#mapRow.key].attr112"
/>
</span>
</li>
</s:iterator>
</s:iterator>
通过提交表单?还不确定问题是什么——你是说你在表单中使用了正确的表示法,但它不起作用吗?@Dave jsp代码已添加到问题中。正确显示值,但在“名称”中使用了相同的表达式属性,当提交表单时,该值不会出现在操作中。名称是名称;您需要在对象图之后对其命名:OGNL所做的只是将表达式转换为调用。它无法知道fieldMap
实际上不是名为fieldMap
的属性。那么名称应该是objA.objB.myM吗ap(“%{fieldMap.key}”).attr112?Dave,谢谢你调查此事。Andrea,抱歉…IDE对象结构和控制台输出已附加到原始问题中。起初我认为,一个映射就足够了,但看起来它必须是来自guava的树型表,这使得它更加复杂。你能看一下吗?虽然是树型的edTable是地图中的一个地图,请告诉我您是否希望我就此提出另一个问题。我尝试过使用mymap[#outerkey][#innerkey].attr112,但它不起作用。嗯,很好:D我从未使用过这种东西,但如果您看看如何在Java中访问对象,那么它是完全相同的(具有不同的语法,但语义相同)在OGNL中,我可以建议您从根级别的单个TreeBasedTable对象开始(objA的同级),只是为了测试您是否可以使用OGNL从JSP获取并正确返回其值;一旦实现了这一点,就开始深入研究具有所有复杂性的双/三重迭代。希望对我的地图问题有所帮助,您的解决方案会起到作用。我已经为番石榴表打开了另一个讨论。感谢您抽出时间来研究它s、 [连结]