我是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吗?有人能指出我正确的方向开始,拜托?
感谢您提供任何有用的提示!
答案 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>