后台是SSH,查询出了一个list结果,将其在JSP页面的表格里显示。非常--------急急急急急急急急查询出来的list
后台是SSH,查询出了一个list结果,将其在JSP页面的表格里显示。非常--------急急急急急急急急
查询出来的list结果集是这样的:
id_1 id_2 count
A3 B5 2
A1 B2 4
A2 B3 3
A1 B1 2
A5 B3 1
A4 B4 2
然后我要把这个结果集里的count在JSP页面的表格里面显示。
要符合行与列才在那个对应的单元格里显示。(下面是我要的结果,最后要显示成这样,我还没弄好。)
行是固定在A1-A10,列B1-B10内的。(也就是说整个表格是死的,动态的根据数据库里对应的数据来控制tr与td也可以,烦请知道的大侠支个招。)
A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
B1 2
B2 4
B3 3 1
B4 2
B5 2
B6
B7
B8
B9
B10
[最优解释]
收起你那破分滚蛋。
[其他解释]<table>
<s:iterator value="list" status="x">
<s:if test="<s:property value="#x.count">==1">
<tr>
<td>
</td>
<s:iterator value="list" >
<td>
<s:property value="#list.id_1">
</td>
</s:iterator>
</tr>
</s:if>
<s:else>
<tr>
<s:iterator value="list" status="y">
<s:if test="<s:property value="#y.count">==1">
<td>
<s:property value="#list.id_2">
</td>
</s:if>
<s:iterator value="list" status="v1">
<s:iterator value="list" status="v2">
<s:if test="<s:property value="#v1.count">==<s:property value="#x.count">&&<s:property value="#v2.count">==<s:property value="#y.count">">
<td>
<s:property value="#list.count">
</td>
</s:if>
</s:iterator>
</s:iterator>
</s:iterator>
</tr>
</s:else>
</s:iterator>
</table>
[其他解释]
<s:iterator>
然后根据你需要的格式
显示出每个选项
[其他解释]
2楼的哥们儿,你得if条件都进不去吖,你看看是不是有啥问题?我什么都没显示出来:
<s:action id="coll" name="collectAction!listCollect" executeResult="false" ignoreContextParams="true" namespace="/test">
</s:action>
----------下面是你的代码,我改了些名字。“#coll.result”的"result"是后台定义的一个Object类型变量用来存结果的。
<table>
<s:iterator value="#coll.result" status="x">
<s:if test="<s:property value='#x.count'/>==1">
<tr>
<td>aaaaaaaa</td>
<s:iterator id="h" value="#coll.result">
<td><s:property value="#h.balanceSeg1Id" /></td>
</s:iterator>
</tr>
</s:if>
<s:else>
<tr>
<s:iterator id="z" value="#coll.result" status="y">
<s:if test="<s:property value='#y.count'/>==1">
<td><s:property value="#z.balanceSeg2Id" /></td>
</s:if>
<s:iterator id="s" value="#coll.result" status="v1">
<s:iterator value="#coll.result" status="v2">
<s:if test="<s:property value='#v1.count'/>==<s:property value='#x.count'/>&&<s:property value='#v2.count'/>==<s:property value='#y.count'/>">
<td><s:property value="#s.count" /></td>
</s:if>
</s:iterator>
</s:iterator>
</s:iterator>
</tr>
</s:else>
</s:iterator>
</table>
[其他解释]
你把
<s:if test="<s:property value='#x.count'/>==1">
里面的<s:property value='#x.count'/> 都改成#x.count形式把。。
[其他解释]还是没用,那个if条件好像永远满足不了一样,那一行aaaaa都没显示。
[其他解释]你看看网页源代码 ,里面是怎么样的嘛 ,我昨天写的匆忙,逻辑应该没问题。
[其他解释]源码里面好大一片空白然后接着一个tr然后又好多一片空白又一个tr,大虾,拜托你看一下,实在不行你把思路写一遍咯,我自己来写一遍看看。
[其他解释]页面固定是10*10?
那把你的结果迭代一次,重新装到List<Map<String,Object>>里
map.put(id1+id2,count)
页面自己先写死,<property value="A1B1"/>,<property value="A2B1"/>,...
<property value="A1B10"/>,<property value="A2B10"/>,...
什么时候粘明白了,自己把它改成动态的。
[其他解释]你说的前台我没弄明白意思,你拼成A1B1没用把?A1是行B1是列。
[其他解释]你把行+列当key ,值当作value塞到map里面去,直接在页面上自己写10x10的table,从map里面取。
它是行你就只能当行,它是列你就只能当列,那么要你写代码的做什么?
[其他解释]我对不起你,你说那么多我还是没怎么明白,我是这样理解你说的意思的:先把结果存起来,接着前台直接通过Map的key取值是么?我就是不知道该怎么判断哪个单元格该填值,哪个不该填,因为数据库的值是肯定是会变化的。
[其他解释]
<table>
<s:iterator id="list" value="#coll.result" status="x">
<s:if test="#x.index+1==1">
<tr>
<td></td>
<s:iterator id="h" value="#coll.result">
<td><s:property value="#h.balanceSeg1Id" /></td>
</s:iterator>
</tr>
</s:if>
<s:else>
<tr>
<s:iterator id="z" value="#coll.result" status="y">
<s:if test="#y.index+1==1">
<td><s:property value="#list.balanceSeg2Id" /></td>
</s:if>
<s:iterator value="#coll.result" status="v1">
<s:iterator value="#coll.result" status="v2">
<s:if test="#v1.index==#x.index && #v2.index==#y.index">
<td><s:property value="#list.custCount" /></td>
</s:if>
</s:iterator>
</s:iterator>
</s:iterator>
</tr>
</s:else>
</s:iterator>
</table>
然后结果是这样的:------------------------
A1A1A2A3A4A5
B2444444
B3333333
B5222222
B4222222
B3111111
[其他解释]
其实代码上还是你要自己写,就是一个思路的问题:
1 遍历表格,再遍历数据
2 遍历数据,再遍历表格
你跟你的数据量多少采用哪个方法。
eg:1 对于A1-B1 这个单元格而言,遍历符合要求的数据,放入。
2 对于A1-B1-2 这条数据而言,遍历表格,符合要求,放入。
具体怎么放入。你的表格是死的。HTML语言。慢慢整吧。
[其他解释]
<s:iterator value="#coll.result" status="v1" id="VV">
<s:if
test="#coll.result.balanceSeg1Id==#VV.balanceSeg1Id&&"#coll.result.bala
nceSeg2Id==#z.balanceSeg2Id>
<td><s:property value="#VV.custCount" /></td>
</s:if>
</s:iterator>
把上面这段 覆盖那个status="v1" 的s:iterator 。开始和结束。
[其他解释]你有什么可判断的,你页面写死,按照行+列取100个值,后台有值的格自然就取出来了,没有的自然就空着了。
[其他解释]现在结果变成了这样。。。。。。。。。。。。。。。。。。。
A1A1A2A3A4A5
B224
B333
B52
B42
B311
代码按你说的,然后我稍作了一点改变,因为你那里是不是写错了?
<s:iterator value="#coll.result" status="v1" id="VV">
<s:if test="#list.balanceSeg1Id==#VV.balanceSeg1Id && #list.balanceSeg2Id==#z.balanceSeg2Id">
<td><s:property value="#VV.custCount" />
</td>
</s:if>
</s:iterator>
------其他解决方案--------------------
A1A1A2A3A4A5
B244
B331
B52
B42
B331
变这样了,我不知道你留意了没有,我B1没打出来,数据库是有B1这一列的。
[其他解释]
<s:iterator value="#coll.result" status="v1" id="VV">
<s:if test="#z.balanceSeg1Id==#VV.balanceSeg1Id && #VV.balanceSeg2Id==#list.balanceSeg2Id">
<td><s:property value="#VV.custCount" />
</td>
</s:if>
</s:iterator>
试试 同样替换。。
[其他解释]就STRUTS标签循环遍历出来就好了 。 楼上好多代码解释 。 我就不贴图了 。
[其他解释]我把你的代码改动了,结果是出来了,不过有些地方是重复的,我想要的结果是行和列不会重复,因为A与B都相同的话是count+1,你看下面这个结果
A1A1A2A3A4A5
B1 2
B2 4
B3 3
B5 2
B4 2
B3 1
那个行的A1要不重复,然后4就是在A1B2的位置,反正就是行与列不要重复,因为没有重复的必要。我把你的代码改成了下面的样子,麻烦你给我看看咯,把这个问题解决了我就给分。。要不你给我你QQ,论坛上问好难等。
<table border="1" align="center" border="1" bordercolor="#000000"
cellspacing="0" cellpadding="0" style="border-collapse:collapse;">
<s:iterator id="list" value="#coll.result" status="x">
<s:if test="#x.index+1==1">
<tr>
<td></td>
<s:iterator id="h" value="#coll.result">
<td><s:property value="#h.balanceSeg1Id" />
</td>
</s:iterator>
</tr>
</s:if>
<s:iterator id="z" value="#coll.result" status="y">
<s:if test="#y.index+1==1">
<tr>
<td><s:property value="#list.balanceSeg2Id" /></td>
<s:iterator value="#coll.result" status="v1" id="VV">
<s:if test="#list.balanceSeg1Id==#VV.balanceSeg1Id && #VV.balanceSeg2Id==#list.balanceSeg2Id">
<td><s:property value="#VV.custCount" /></td>
</s:if>
<s:else>
<td> </td>
</s:else>
</s:iterator>
</tr>
</s:if>
</s:iterator>
</s:iterator>
</table>
[其他解释]您那么牛B,还是贴给图给我看看,说得倒是轻巧,我代码都在上面了,你给我遍历出来?
[其他解释]我感觉代码应该没问题了。。。
[其他解释]上课中,晚上给看看把,留你qq
[其他解释]但是A1有两个,B列也有重复的,我就是不想要重复,不然的话数据库有多少个那不多就得有多少列?最多就是10*10。。。
那个循环应该还可以改进,我就是想破脑袋都想不出来改怎么动了。拜托您了。。
[其他解释]我用了你的方法,但是后台的值是在MAP里,要迭代才取得到,而且一迭代打出来好多个count
List<Collect> list=this.collectBiz.listCollect();
this.listMap=new ArrayList<Map<String,Integer>>();
Map<String, Integer> map=new HashMap<String, Integer>();
for(int i=0;i<list.size();i++){
map.put(list.get(i).getBalanceSeg1Id()+list.get(i).getBalanceSeg2Id(),list.get(i).getCustCount());
this.listMap.add(map);
}
this.result=list;
return "index";
这是我后台action里的方法,前台
<s:iterator value="#coll.listMap">
<s:property value="A2B1"/>
</s:iterator>
那个<s:property value="A2B1"/>打出来重复的。。
[其他解释]1401068307---后知后觉
[其他解释]楼上看错了,你装的是什么?
只有一维,只有一个Map,把所有的数据,都装在这一个Map里,行+列做Key,count做value。
迭代的#后面写这个map的引用。
[其他解释]你静态的都没粘明白迭代什么?
<tr>
<td><s:property value="#coll.listMap.A1B1"/></td>
<td><s:property value="#coll.listMap.A1B2"/></td>
<td><s:property value="#coll.listMap.A1B3"/></td>
...
<td><s:property value="#coll.listMap.A1B10"/></td>
</tr>
<tr>
<td><s:property value="#coll.listMap.A2B1"/></td>
<td><s:property value="#coll.listMap.A2B2"/></td>
<td><s:property value="#coll.listMap.A2B3"/></td>
...
<td><s:property value="#coll.listMap.A2B10"/></td>
</tr>
......
<tr>
<td><s:property value="#coll.listMap.A10B1"/></td>
<td><s:property value="#coll.listMap.A10B2"/></td>
<td><s:property value="#coll.listMap.A10B3"/></td>
...
<td><s:property value="#coll.listMap.A10B10"/></td>
</tr>
粘一百遍会不?粘出来了再去想怎么迭代。
[其他解释]
如果我粘一百遍以后不可以迭代你就等着我骂人,迭代成功了就"3q",顺便给你分。。
[其他解释]我是按你楼上说的用List<Map<String,String>>来装的啊。。
[其他解释]哟,尼玛的还有脾气。。
[其他解释]你妈没脾气,你爹我有脾气。