0

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>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 セルが月と日付で、2 番目の td セルが会議の名前と時間のリストである日付ごとに 1 つの行が必要だと言っています。

JSTLを使用してこれを行うことはできますか? 誰かが私を正しい方向に向けて始めることができますか?

役立つヒントをありがとう!

4

2 に答える 2

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側では、Webデザイナーがフォーマットを追加するため、フォーマットなしでこのようなものを置くことができます

<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 に答える
1

JSTL の経験から、サーバー側にできるだけ多くのロジックを配置する方がよいことがわかりました。理論的には、日付が変化した場合にのみ日付を表示する条件を設定できますが、これにより、JSP で論理条件が得られます。

データを Map として整理します。

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

したがって、月日をキーとする外側の Map と、時刻をキーとする内側の Map が作成されます。次に、2つのループがあります

外側のループ: Day をループします。デザイナーが望むように、毎日が一度だけ表示されます

内部ループ: 日中ループします。あなたは一日のすべての時間の会議を表示します

于 2013-06-04T16:41:32.023 に答える