UserModule全貌

整个类贴出来,带注释的哦

  1. package net.wendal.nutzbook.module;
  2. import java.util.Date;
  3. import javax.servlet.http.HttpSession;
  4. import net.wendal.nutzbook.bean.User;
  5. import org.nutz.dao.Cnd;
  6. import org.nutz.dao.Dao;
  7. import org.nutz.dao.QueryResult;
  8. import org.nutz.dao.pager.Pager;
  9. import org.nutz.ioc.loader.annotation.Inject;
  10. import org.nutz.ioc.loader.annotation.IocBean;
  11. import org.nutz.lang.Strings;
  12. import org.nutz.lang.util.NutMap;
  13. import org.nutz.mvc.annotation.At;
  14. import org.nutz.mvc.annotation.Attr;
  15. import org.nutz.mvc.annotation.By;
  16. import org.nutz.mvc.annotation.Fail;
  17. import org.nutz.mvc.annotation.Filters;
  18. import org.nutz.mvc.annotation.Ok;
  19. import org.nutz.mvc.annotation.Param;
  20. import org.nutz.mvc.filter.CheckSession;
  21. @IocBean // 声明为Ioc容器中的一个Bean
  22. @At("/user") // 整个模块的路径前缀
  23. @Ok("json:{locked:'password|salt',ignoreNull:true}") // 忽略password和salt属性,忽略空属性的json输出
  24. @Fail("http:500") // 抛出异常的话,就走500页面
  25. @Filters(@By(type=CheckSession.class, args={"me", "/"})) // 检查当前Session是否带me这个属性
  26. public class UserModule {
  27. @Inject // 注入同名的一个ioc对象
  28. protected Dao dao;
  29. @At
  30. public int count() { // 统计用户数的方法,算是个测试点
  31. return dao.count(User.class);
  32. }
  33. @At
  34. @Filters // 覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session
  35. public Object login(@Param("username")String name, @Param("password")String password, HttpSession session) {
  36. User user = dao.fetch(User.class, Cnd.where("name", "=", name).and("password", "=", password));
  37. if (user == null) {
  38. return false;
  39. } else {
  40. session.setAttribute("me", user.getId());
  41. return true;
  42. }
  43. }
  44. @At
  45. @Ok(">>:/") // 跟其他方法不同,这个方法完成后就跳转首页了
  46. public void logout(HttpSession session) {
  47. session.invalidate();
  48. }
  49. @At
  50. public Object add(@Param("..")User user) { // 两个点号是按对象属性一一设置
  51. NutMap re = new NutMap();
  52. String msg = checkUser(user, true);
  53. if (msg != null){
  54. return re.setv("ok", false).setv("msg", msg);
  55. }
  56. user = dao.insert(user);
  57. return re.setv("ok", true).setv("data", user);
  58. }
  59. @At
  60. public Object update(@Param("..")User user) {
  61. NutMap re = new NutMap();
  62. String msg = checkUser(user, false);
  63. if (msg != null){
  64. return re.setv("ok", false).setv("msg", msg);
  65. }
  66. user.setName(null);// 不允许更新用户名
  67. user.setCreateTime(null);//也不允许更新创建时间
  68. user.setUpdateTime(new Date());// 设置正确的更新时间
  69. dao.updateIgnoreNull(user);// 真正更新的其实只有password和salt
  70. return re.setv("ok", true);
  71. }
  72. @At
  73. public Object delete(@Param("id")int id, @Attr("me")int me) {
  74. if (me == id) {
  75. return new NutMap().setv("ok", false).setv("msg", "不能删除当前用户!!");
  76. }
  77. dao.delete(User.class, id); // 再严谨一些的话,需要判断是否为>0
  78. return new NutMap().setv("ok", true);
  79. }
  80. @At
  81. public Object query(@Param("name")String name, @Param("..")Pager pager) {
  82. Cnd cnd = Strings.isBlank(name)? null : Cnd.where("name", "like", "%"+name+"%");
  83. QueryResult qr = new QueryResult();
  84. qr.setList(dao.query(User.class, cnd, pager));
  85. pager.setRecordCount(dao.count(User.class, cnd));
  86. qr.setPager(pager);
  87. return qr; //默认分页是第1页,每页20条
  88. }
  89. @At("/")
  90. @Ok("jsp:jsp.user.list") // 真实路径是 /WEB-INF/jsp/user/list.jsp
  91. public void index() {
  92. }
  93. protected String checkUser(User user, boolean create) {
  94. if (user == null) {
  95. return "空对象";
  96. }
  97. if (create) {
  98. if (Strings.isBlank(user.getName()) || Strings.isBlank(user.getPassword()))
  99. return "用户名/密码不能为空";
  100. } else {
  101. if (Strings.isBlank(user.getPassword()))
  102. return "密码不能为空";
  103. }
  104. String passwd = user.getPassword().trim();
  105. if (6 > passwd.length() || passwd.length() > 12) {
  106. return "密码长度错误";
  107. }
  108. user.setPassword(passwd);
  109. if (create) {
  110. int count = dao.count(User.class, Cnd.where("name", "=", user.getName()));
  111. if (count != 0) {
  112. return "用户名已经存在";
  113. }
  114. } else {
  115. if (user.getId() < 1) {
  116. return "用户Id非法";
  117. }
  118. }
  119. if (user.getName() != null)
  120. user.setName(user.getName().trim());
  121. return null;
  122. }
  123. }