2010-07-22 3 views
1

웹 페이지에 표시 할 정보를 수집하는 서블릿 (변경할 수 없음)이 있습니다. JSP 페이지의 빈을 사용하여 정보를 반복한다. JSP로 데이터를 재정렬하는 방법

내가 단순화하기 위해 노력했지만 내 정보 그래서 예를 들어이 alt text 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 

이 경우에 좋은 곳입니다 카테고리 별, 색상 별 연간 보고서를 표시합니다. 몇 년 동안 쉽게 반복 할 수 있고, 범주를 반복하고, 색상을 반복 할 수 있습니다. 이 보고서는 내가 가지고있는 (단순화 된) alt text http://img841.imageshack.us/img841/3666/reportihave.jpg

이제 나는 그 정보를 옆으로 돌릴 필요가있다. 1 년에 색상 당 개수를 표시하는 보고서를 만들어야합니다. 이 보고서는 내가 필요로한다 :

alt text http://img33.imageshack.us/img33/461/reportineed.jpg

는 어떻게 JSP 내의 정보를 재 배열 할 수 있습니까? 정보를 수집하기 위해 배열을 사용해야합니까, 아니면 사용할 수있는 해시와 동일한 것이 있습니까?

감사합니다.

답변

0

나는 loopi하여 문제를 해결 내가 컬러리스트에 올 때까지 빈에있는 목록을 읽은 다음, 각 색상에 대한 모든 레코드를 찾을 때까지 계속 반복해서 반복하기 시작했습니다.

<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}" > 

효율적인가요? No.

JSTL을 사용하면 좋은가요? 아니.

하지만 나는 붙어 있습니다. 콩에서 아무것도 변경할 수 없다. JSP를 사용하여 작업해야했다.

+0

원래 bean을 랩핑하고 대신 사용하는 다른 bean을 작성하십시오. – BalusC

2

저는 JSP에서 이러한 일을해야한다고 생각하지 않습니다. 서블릿이 요청을 처리하도록하고, 데이터를 올바른 형식으로 저장하고, JSP가이를 표시하도록합니다. JSP로하지 말아야 할 일을 JSP에 요청하는 것처럼 들립니다.

개체 인 경우 다른 키 (이 경우 색)를 반복하고 큰 문제없이 다시 표시 할 수 있어야합니다. 서블릿이 올바른 형식으로 두 번째 맵을 보내도록합니다.

JSTL을 사용하고 있습니까? 그렇지 않다면, 당신은해야합니다.

+0

그들은 객체이지만 중첩되어 있습니다. 그래서 year 객체는 각각 color 객체의 목록을 포함하는 category 객체 목록을 포함합니다. 불행히도 서블릿을 변경할 수 없다. 나는 JSP로 되감기 및 되감기를 시도했다. –

1

가 원래의 접근 방식 consistant 할하려면 다음과 같이 할 중첩 된 배열을 다시 정렬 할 수 있습니다 :

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

귀하의 JSP 코드는 모든 배열을 통해 반복하는 데 아주 나쁜 봐야한다. 나의 제안은 다음과 같다 : 테이블의 행을 나타내는 자바 빈즈 클래스를 생성하고 표시하기 위해 JSP이 자바 빈즈 클래스의 인스턴스의 목록을 전달합니다

자바 빈즈

public class ColorRow{ 
    private String color; 
    private int year; 
    //... 
    //getters and setters 
} 

서블릿/컨트롤러

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> 
관련 문제