[学习笔记]基于注解的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>

效果如下图:

0CF36795-4DFE-49FC-BAE9-2CEAE1FDE869

使用了SessionAttributes后可以在其他页面调用得到所需要的值,如下图

B6B4996F-B86A-4314-A4A1-F2A74B9A6599

总结:

我们使用@SessionAttributes可以将常用的东西参数封装到ModelMap中,这样可以高效利用,如分页,配置文件名称等。。

posted @ 2011-04-12 16:51  EdwardLau  阅读(2132)  评论(0编辑  收藏  举报