在一般情况下:我们登录系统时,第一次登录当用户名或密码输入错误,在登录页面给出错误原因,当我们再刷新登录页面,应该是首次登录系统的页面(这时就不应该再给出出错提示),这时我们就应该想到错误提示信息到底放在哪个作用域中能满足这样的要求,我们常见的作用域有三个:request,session,application.就当前需求,session和application显然不满足要求,request作用域又仅限于当次请求,如果我们重定向传参,request显然无法把值传到另一个方法中.所以request也不好.但spring给我们提供了一个方案,就是RedirectAttributes 类.使用如下:

我们登录系统时,form表单的method设定为post,form表单代码如下:

<form action="/sh/login" method="post">
  Usersname:<input type="text" name="username" value="${users.username }"><br>
  Password:<input type="text" name="password" value="${users.password }"><br>
       <input type="submit" value="submit">
</form>

我们可以专门写一个登录控制器来处理这个问题,让登录时根据method值的不同访问不同的方法

@Controller
@RequestMapping
public class LoginController {
@Autowired
private UsersService usersService;
@Autowired
private HttpSession session;
@RequestMapping(value="/login",method=RequestMethod.GET)

//当登录页面刷新时就会执行这个方法
public String login(){
  return "login";
}

@RequestMapping(value="/login",method=RequestMethod.POST)

//参数RedirectAttributes attr是spring自动创建的
public String login(Users users,RedirectAttributes attr){

  if(StringUtils.hasLength(users.getUsername())){
    Users u = this.usersService.findByUsername(users.getUsername());

    //有值就跳转到系统的首页
    if(u!=null&&u.getPassword()!=null&&u.getPassword().equals(users.getPassword())){
      session.setAttribute("admin", u);
      return "redirect:/users/index";
    }
  }

  //这里必须使用addFlashAttribute方法,这样在刷新登录页面时,attr中就没有值了
  attr.addFlashAttribute("msg","用户名或密码错误");

//登录数据回显时使用的
  attr.addFlashAttribute("users",users);

  //这时我们重定向或者转发都可以满足要求
  return "redirect:/login";
}
}

最新文章

  1. JVM:查看java内存情况命令
  2. Node.js 究竟是什么
  3. HTML的表格标签
  4. The BKS System for the Philco-2000 学习笔记
  5. 第三百零二天 how can I 坚持
  6. 通过js根据后台数据动态生成一个页面
  7. C# 操作XML文件,用XML文件保存信息
  8. 模块化开发之sea.js实现原理总结
  9. 04-OC属性的使用、自动释放池、封装和继承
  10. kafkaspout以及kafkabolt的最简实例
  11. BP神经网络及其算法优化
  12. django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件
  13. day 49 html 学习 css 学习
  14. Python实现Json结构对比的小工具兼谈编程求解问题
  15. 数据库 proc编程八
  16. 「小程序JAVA实战」小程序的横向视频和页面拦截(59)
  17. Myeclipse错误:Errors occurred during the build. Errors running builder &#39;DeploymentBuilder&#39; on project ...解决方法
  18. UVA.548 Tree(二叉树 DFS)
  19. [Leetcode] word break 拆分词语
  20. JavaWeb之用户数据回显

热门文章

  1. go http client, http server
  2. cc2530 AES加密
  3. bat文件:启动,休眠VBox虚拟机
  4. Logstash之二:原理
  5. Logstash之一:入门介绍
  6. 转载-MyBatis学习总结
  7. 1033 To Fill or Not to Fill (25 分)
  8. Jade简单教程
  9. 递归神经网络(Recursive Neural Network, RNN)
  10. windows hbase installation