我在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>
问题是,当用户执行以下操作时:
如何让history.jsp显示最后访问过的历史记录,而不是从头开始显示。
我是Spring的新手,欢迎所有建议。 感谢。
答案 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);
}