2013-06-04 47 views
0

我是JSTL的新成员,并且有一个问题,因为我需要在用HTML显示数据之前处理一些数据。使用JSTL处理数据

这里有一个从服务器返回我的数据:

<participantMeetingList> 
    <meeting> 
     <meetingName>Test</meetingName> 
     <description>Description for test meeting</description> 
     <startTime>2013-06-13 00:45:00.0</startTime> 
     <endTime>2013-06-13 02:00:00.0</endTime> 
     <creatorName>[email protected]</creatorName> 
    </meeting> 
    <meeting> 
     <meetingName>HTML 5 lobby test</meetingName> 
     <description>Description for lobby test</description> 
     <startTime>2013-06-04 11:30:00.0</startTime> 
     <endTime>2013-06-04 12:30:00.0</endTime> 
     <creatorName>[email protected]</creatorName> 
    </meeting> 
</participantMeetingList> 

我使用这个JSTL陆续为每个记录简单地渲染1行:

<div id="meeting-schedule"> 

         <c:forEach 
          var="meeting" 
          items="${response.mMeetingList}" 
          begin="0" 
          end="5"> 

          <div class="row"> 

           <!-- MEETING DAY AND DATE --> 
           <div class="span1"> 
            <small class="muted"><fmt:formatDate value="${meeting.startTime}" type="date" pattern="E MMM"></fmt:formatDate></small> 
            <h2><fmt:formatDate value="${meeting.startTime}" type="date" pattern="d"></fmt:formatDate></h2> 
           </div> 

           <ul class="span4 unstyled"> 
            <li> 
             <a href="#" class="row" onclick="getMeetingDetails(${meeting.meetingId})"> 
              <div class="span1"><fmt:formatDate value="${meeting.startTime}" type="time" pattern="h:mm a"></fmt:formatDate></div> 
              <div class="span3">${meeting.meetingName}</div> 
             </a> 
            </li> 
           </ul> 

          </div> 

         </c:forEach> 

        </div> 

然而,我们的设计师说,现在他们想第一个td单元格是月份和日期,第二个td单元格是会议名称和时间的列表。

我可以使用JSTL来做到这一点吗?任何人都可以指出我正确的方向来开始吗?

感谢您的任何有用的提示!

回答

1

在Java方面的每一次它应该是这样的

Map<String, Map<String, List<String>>> outer = 
    new HashMap<String, Map<String,List<String>>>(); 

Map <String,List<String>> inner = new HashMap<String, List<String>>(); 

List <String> dayMeetings = new ArrayList<String>(); 
dayMeetings.add("Meeting1"); 
dayMeetings.add("Meeting2"); 

inner.put("10:00", dayMeetings); 
outer.put("2002-12-01", inner); 

然后添加“外”到响应的属性,如果使用Spring(不是必要的)这个将是:

return new ModelAndView("meetingView", "meetings", outer); 

在JSP方面,你可以把这样的事情没有任何格式,因为你的网页设计师将增加格式化

<c:forEach var="entry" items="${meetings}"> 
<c:set var="day" value="${entry.key}" /> 
<c:set var="dayMeetings" value="${entry.value}" /> 
<c:out value="${day}" /> 
<c:forEach var="timeMeeting" items="${dayMeetings}"> 
    <c:out value="${timeMeeting.key}" /> 
    <c:out value="${timeMeeting.value}" /> 
</c:forEach> 
</c:forEach> 
+0

非常感谢您的帮助! – fumeng

1

我对JSTL的经验告诉我,最好在服务器端放置尽可能多的逻辑。理论上讲,只有当它发生变化时,才能显示一个条件来显示日期,但这会给你在JSP中的逻辑条件。

我会组织数据地图:

<Day, Map<day-time, meeting>. 

所以,你将有一个月的日期作为重点,并与天为一个关键的时间内地图外地图。然后你将有2个循环

外环:循环的一天。每天只会按设计师的要求显示一次

内部循环:在白天循环。您将显示会议当天

+0

感谢您迅速回复;我很抱歉,但我是JSTL的新手(来自Flex),我一直试图弄清楚你的回应。例如,如何使用与日期相同的键创建Map对象?我猜你的代码片段并不完全符合我需要做的事情。如果我可以完成该部分,那么创建循环对我来说应该不成问题。 – fumeng

+0

刚刚添加的代码 - 没有彻底测试,无论如何,实际的代码会有所不同。您将从您的数据中填充地图 –