0

Spring 3 MVC アプリケーションで Apache Tiles 2 を使用しています。レイアウトは、左側にメニュー、右側に本文です。

レイアウト.jsp

<table>
  <tr>
    <td height="250"><tiles:insertAttribute name="menu" /></td>
    <td width="350"><tiles:insertAttribute name="body" /></td>
  </tr>
</table>

menu.jsp

<div><ul>
<li><a href="account.html">account</a></li>
<li><a href="history.html">history</a></li></ul></div>

history.jsp の本体

<c:forEach var="history" items="${histories}"><p><c:out value="${history}"></c:out></p></c:forEach>

履歴のコントローラーもあります

@Controller 
public class HistoryController {

@RequestMapping("/history")
public ModelAndView showHistory() {

    ArrayList <String> histories = read from DB.
    return new ModelAndView("history","histories",histories);

   }
}

そのため、メニューの履歴リンクをクリックするたびに、showHistory() が呼び出されます。

しかし、もっと複雑なケースがあります。履歴 DB には数百のエントリがあるため、history.jsp が最初に表示されたときにのみ最初の 10 件を表示し、次に、別のコントローラーを追加して次の 10 件を表示するために、history.jsp に「さらに履歴を表示」ボタンを追加することにしました。

問題は、ユーザーが次のことを行う場合です。

  1. 履歴リンクをクリックすると、0 ~ 9 件の履歴が表示されます。
  2. 「履歴をもっと見る」をクリックすると10~19件表示され、
  3. アカウント リンクをクリックしてアカウント ページに戻り、
  4. history リンクをもう一度クリックすると、history.jsp 表示 10 から 19 ではなく、0 から 9 が表示されます。

最初から表示するのではなく、最後にアクセスした履歴を表示するように history.jsp を作成するにはどうすればよいですか。

私はSpringに非常に慣れていません。すべての提案を歓迎します。ありがとう。

4

1 に答える 1

0

あなたがすることは、最後に要求された範囲をセッションに保存することです。ユーザーが (リクエストで) 範囲を指定しない場合は、保存されているセッションを使用します。

このようなもの

@RequestMapping("/history")
public ModelAndView showHistory(@RequestParam(value="startIndex", defaultValue="-1") Integer startIndex, HttpSession session) {
    Integer start = Integer.valueOf(0);
    if (startIndex == null || startIndex.intValue() < 0) {
        // get from session
        Integer sessionStartIndex = (Integer) session.getAttribute("startIndex");
        if (sessionStartIndex != null) {
            start = sessionStartIndex;
        }
    } else {
        start = startIndex;
    }
    session.setAttribute("startIndex", start);
    ArrayList <String> histories = read from DB, starting with start.
    return new ModelAndView("history","histories",histories);

   }
于 2012-05-03T11:33:12.510 に答える