0

我是 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 为每条记录简单地呈现 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 做到这一点吗?任何人都可以指出我正确的开始方向吗?

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

4

2 回答 2

1

我在 JSTL 方面的经验告诉我,最好将尽可能多的逻辑放在服务器端。从理论上讲,您可以设置一个条件以仅在日期更改时显示日期,但这将为您提供 JSP 中的逻辑条件。

我会将数据组织为地图:

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

因此,您将拥有以月份日期为键的外部 Map,以及以一天中的时间为键的内部 Map。然后你会有2个循环

外循环:循环一天。每天将根据您的设计师的要求仅显示一次

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

于 2013-06-04T16:41:32.023 回答
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>
于 2013-06-05T15:21:57.447 回答