需求:后台有两个Map,他们的Key相同,顺序也相同,但是value不同,需要在传入前台后,遍历其中一个Map,获取到当前Map的值,然后根据当前Map的Key获取另一个Map的记录,并用js动态比较他们的不同项,然后用title属性呈现出来。
编码过程:第一步遍历当前Map,代码如下:
<s:iterator value="maps" id="column" status="st">
<s:set name="index"><s:property value="#st.index"/></s:set>
<%-- Map的key --%>
<td><s:property value="key"/></td>
<%-- 品牌名 --%>
<td><input type="text" name="reports[${index}].brand" value="<s:property value="value.brand"/>" /></td>
</s:iterator>
此处属性较多,只列出一个做为显示代表。
第二步加上另一个Map的处理方式:
<s:iterator value="maps" id="column" status="st">
<s:set name="baseKey"><s:property value="key"/></s:set>
<s:set name="index"><s:property value="#st.index"/></s:set>
<%-- Map的key --%>
<td><s:property value="key"/></td>
<%-- 品牌名 --%>
<td><input type="text" name="reports[${index}].brand" value="<s:property value="value.brand"/>" base='<s:property value="bases.get(#baseKey).brand"/>' /></td>
</s:iterator>
但是这样base的值总是为空,后来通过一步步测试,发现#baseKey和bases.get(#baseKey)都是有值的,
但是#baseKey的值不正确,后来经过进一步的测试,改为如下代码就Okey了:
<s:iterator value="maps" id="column" status="st">
<s:set name="index"><s:property value="#st.index"/></s:set>
<%-- Map的key --%>
<td><s:property value="key"/></td>
<%-- 品牌名 --%>
<td><input type="text" name="reports[${index}].brand" value="<s:property value="value.brand"/>"base='<s:property value="bases.get(key).brand"/>' /></td>
</s:iterator>
这样就可获取到两个Map的值,接下来通过jQuery比较他们的不同即可。