我有一个servlet(我无法更改)来收集要在网页上显示的信息。我在JSP页面中使用bean来遍历信息。
我试图简化,但我的信息存储表基本上就像这样 alt text http://img36.imageshack.us/img36/4295/schemase.jpg
因此,例如,bean将信息存储在嵌套数组中,如下所示:
---2009
------TOYOTA
---------BLUE 10
---------RED 20
------CHEVY
---------BLUE 30
---------RED 10
---2010
------TOYOTA
---------BLUE 30
---------RED 12
------CHEVY
---------BLUE 12
---------RED 20
这非常适合我每年按类别显示每种颜色的报告。我可以轻松地循环这些年,循环遍历类别,然后循环遍历颜色。这是我的报告(简化) alt text http://img841.imageshack.us/img841/3666/reportihave.jpg
现在我需要将这些信息转向侧面。我需要创建一个报告来显示每年每种颜色的数量。这是我需要的报告:
alt text http://img33.imageshack.us/img33/461/reportineed.jpg
如何重新排列JSP中的信息?我应该使用数组来收集信息,还是可以使用等效的哈希?
由于
答案 0 :(得分:2)
我认为你不应该在JSP中做这些事情。让servlet处理请求,以正确的形式放置数据,让JSP只显示它。听起来像你要求JSP做一些不应该做的事情。
如果这些是对象,您应该能够迭代不同的键(在这种情况下为颜色)并重新显示而不会有太多麻烦。让servlet以正确的形式发送第二张地图。
您使用的是JSTL吗?如果你不是,你应该。
答案 1 :(得分:1)
为了与原始方法保持一致,您可以重新排列嵌套数组,如下所示:
---BLUE
------2009
---------TOYOTA 10
---------CHEVY 30
------2010
---------TOYOTA 30
---------CHEVY 12
etc
您的JSP代码必须非常糟糕,必须遍历所有数组。我的建议如下:创建一个JavaBean类,它表示表中的一行,并将此JavaBean类的实例List传递给JSP进行显示:
的JavaBean
public class ColorRow{
private String color;
private int year;
//...
//getters and setters
}
的Servlet /控制器
List<ColorRow> colorTable = new ArrayList<ColorRow>();
//populate the list
request.setAttribute("colorTable", colorTable);
JSP
<c:forEach items="${colorTable}" var="row">
<tr><td>${row.color}</td><td>${row.year}</td><!-- ... --></tr>
</c:forEach>
答案 2 :(得分:0)
我通过遍历bean中的列表来解决问题,直到我到达颜色列表,然后一次又一次地开始循环,直到找到每种颜色的所有记录。
<c:forEach var="year1" items="${Info.list}" varStatus="yearCounter1" >
<c:if test="${yearCounter1.count == 1}">
<c:forEach var="clist1" items="${year1.list}" varStatus="catCounter1">
<c:if test="${catCounter1.count == 1}">
<c:forEach var="colorlist1" items="${colorlist1.list}" varStatus="colorCounter1">
<!-- this gets me to all possible colors -->
<c:forEach var="year2" items="${Info.list}" varStatus="yearCounter2" >
<c:forEach var="clist2" items="${tlist2.list}" varStatus="catCounter2">
....
<c:if test="${colorCounter1.description==colorCounter3.description&& year2.description==year3.description && clist2.description==clist3.description}" >
有效吗?否。
是否可以很好地利用JSTL?否。
但我被困住了。我无法更改bean中的任何内容,我不得不使用JSP来完成工作。