如何在JSP中重新排列数据

时间:2010-07-22 21:30:40

标签: java jsp javabeans

我有一个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中的信息?我应该使用数组来收集信息,还是可以使用等效的哈希?

由于

3 个答案:

答案 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来完成工作。