Как переставить данные в JSP - PullRequest
1 голос
/ 23 июля 2010

У меня есть сервлет (который я не могу изменить) для сбора информации для отображения на веб-странице. Я использую бин на странице JSP, чтобы просмотреть информацию.

Я попытался упростить, но моя информация хранится в таблицах в основном так альтернативный текст http://img36.imageshack.us/img36/4295/schemase.jpg

Так, например, бин хранит информацию во вложенных массивах следующим образом:

---2009
------TOYOTA
---------BLUE 10
---------RED 20
------CHEVY
---------BLUE 30
---------RED 10
---2010
------TOYOTA
---------BLUE 30
---------RED 12
------CHEVY
---------BLUE 12
---------RED 20

Это отлично подходит для отображения отчета за год, по категориям, по цветам. Я могу легко пройтись по годам, по категориям, а затем по цветам. Это мой отчет (упрощенный) альтернативный текст http://img841.imageshack.us/img841/3666/reportihave.jpg

Теперь мне нужно перевернуть эту информацию в сторону. Мне нужно создать отчет для отображения количества цветов в год. Это отчет мне нужен:

альтернативный текст http://img33.imageshack.us/img33/461/reportineed.jpg

Как я могу изменить информацию в JSP? Должен ли я использовать массивы для сбора информации или есть эквивалент хеша, который я могу использовать?

Спасибо

Ответы [ 3 ]

2 голосов
/ 23 июля 2010

Я не думаю, что вы должны делать такие вещи в JSP.Пусть сервлет обработает запрос, поместит данные в правильную форму, а JSP просто отобразит их.Мне кажется, что вы просите JSP сделать что-то, чего не следует делать.

Если это объекты, вы должны иметь возможность перебирать другой ключ (в данном случае цвет) и перерисовывать без особогобеда.Пусть сервлет отправит вторую карту в нужной форме.

Используете ли вы JSTL?Если нет, так и должно быть.

1 голос
/ 23 июля 2010

Чтобы быть последовательным с вашим исходным подходом, вы можете переставить вложенные массивы так, чтобы они выглядели следующим образом:

---BLUE
------2009
---------TOYOTA 10
---------CHEVY 30
------2010
---------TOYOTA 30
---------CHEVY 12
etc

Ваш JSP-код должен выглядеть очень плохо, поскольку нужно перебирать все массивы. Мое предложение будет следующим: создать класс JavaBean, который представляет строку в таблице, и передать список экземпляров этого класса JavaBean в 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);

1012 * JSP *

<c:forEach items="${colorTable}" var="row">
  <tr><td>${row.color}</td><td>${row.year}</td><!-- ... --></tr>
</c:forEach>
0 голосов
/ 30 июля 2010

Я решил проблему, просматривая списки в 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.

...