如何在Spring MVC和Apache Tiles中更新JSP

时间:2012-05-03 10:43:32

标签: spring spring-mvc tiles2

我在Spring 3 MVC应用程序中使用Apache Tiles 2,布局是:左边的菜单和右边的正文。

layout.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 of 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()。

但是有一个更复杂的案例。历史数据库有数百个条目,因此我们决定仅在history.jsp第一次显示时显示前10个,然后在history.jsp中添加“显示更多历史记录”按钮,以便通过添加另一个控制器来显示下一个10。 / p>

问题是,当用户执行以下操作时:

  1. 点击历史记录链接,显示0-9个历史记录,
  2. 点击“显示更多历史记录”以显示10到19,
  3. 点击帐户链接返回帐户页面
  4. 再次点击历史记录链接,而不是history.jsp显示10到19,它显示0-9。
  5. 如何让history.jsp显示最后访问过的历史记录,而不是从头开始显示。

    我是Spring的新手,欢迎所有建议。 感谢。

1 个答案:

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

   }