[学习笔记]基于注解的spring3.0.x MVC学习笔记(九)
本章节,仅为@SessionAttributes的功能扩展介绍介绍,结合@requestparam注解进行简易无数据库分页。
之前介绍了@SessionAttributes的功能,他可以保存指定的值在modelnap中,不会因为request提交后则消失,我们利用这个特性,可以利用SessionAttributes注解进行简易的分页。
代码如下:
1: public class testservice<T>{
2:
3: public List<UserBean> list ;
4:
5: public Page<T> getuserlist(int page,int size){
6: List<UserBean> temp = new ArrayList<UserBean>();
7:
8: for (int i = Page.getStartOfPage(page, size); i < Page.getLastOfPage(page, size); i++) {
9: temp.add(this.list.get(i));
10: }
11: return (Page<T>) new Page<T>(Page.getStartOfPage(page, size), size, list.size(), (List<T>) temp);
12: }
13:
14: public int getsize(){
15: return this.list.size();
16: }
17:
18: public testservice(){
19: list =new ArrayList<UserBean>();
20: for (int i = 0; i < 20; i++) {
21: UserBean bean = new UserBean();
22: bean.setId(i);
23: bean.setUsername(String.valueOf(i));
24: bean.setPassword(String.valueOf(i));
25: this.list.add(bean);
26: }
27: }
28: }
由于采取了不带数据库进行分页,此类作为仅作假设从数据库取回数据用。
Page类是属于个人封装分页类,支持spring struts2 jstl标签(还在优化阶段中暂不公开)
controller代码如下:
1: @Controller
2: @SessionAttributes(value={"pagesize","number"})
3: @RequestMapping("/system")
4: public class testSessionAttribute {
5:
6: private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
7:
8: @RequestMapping("listindex")
9: public String test(ModelMap map ,@RequestParam(defaultValue="10") Integer pagesize,@RequestParam(defaultValue="1") Integer number){
10:
11: Page<UserBean> users = new testservice<UserBean>().getuserlist(number, pagesize);
12: /**
13: * 如果获取的数据集为空与当前页不为1的话,如-1 则调用
14: * */
15: if(users.getResultSize()==0&&users.getPageNumber()!=1){
16: number = users.getLastPage();
17: users = new testservice<UserBean>().getuserlist(number, pagesize);
18: }
19: map.put("number", number);
20: map.put("pagesize", pagesize);
21: map.put("page", users);
22: return "pagelist";
23: }
24:
25:
26: }
代码说明:利用@SessionAttributes分别定义了每页显示数据pagesize与下一页页码nubmer,这样可以保证在其他地方可以得到他当前页与每页显示数。
jsp如下:
1: <form action="list" >
2:
3: <table>
4: <thead>
5: <tr>
6: <th>编号</th>
7: <th>姓名</th>
8: <th>密码</th>
9: </tr>
10: </thead>
11: <tbody>
12: <c:forEach items="${page }" var="data">
13: <tr>
14: <td>${data.id }</td><td>${data.username }</td><td>${data.password }</td>
15: </tr>
16: </c:forEach>
17: </tbody>
18: </table>
19: <a href="listindex?number=${page.firstPage }">首页</a>|<a href="listindex?number=${page.nextPage }">下一页</a>|<a href="listindex?number=${page.previousPage }">上一页</a>|<a href="listindex?number=${page.lastPage }">尾页</a>
20: </form>
效果如下图:
使用了SessionAttributes后可以在其他页面调用得到所需要的值,如下图
总结:
我们使用@SessionAttributes可以将常用的东西参数封装到ModelMap中,这样可以高效利用,如分页,配置文件名称等。。