使用JSTL处理数据

时间:2013-06-04 16:25:11

标签: javascript jstl

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

这是从服务器返回的数据:

<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>me@test.com</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>you@test.com</creatorName>
    </meeting>
</participantMeetingList>

我正在使用这个JSTL为每条记录简单地渲染一行:

<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吗?有人能指出我正确的方向开始,拜托?

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

2 个答案:

答案 0 :(得分:1)

我对JSTL的经验告诉我,最好在服务器端放置尽可能多的逻辑。从理论上讲,你可以设置一个条件来仅在它发生变化时显示日期,但这将为你提供JSP中的逻辑条件。

我会将数据组织为Map:

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

因此,您将使用月份日期作为关键字的外部地图,以及将当天时间作为关键字的内部地图。然后你将有2个循环

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

内环:在白天循环。您将在一天中的每个时间显示会议

答案 1 :(得分: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);

然后你将“outer”添加到响应属性中,如果使用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>