今天在使用thymeleaf模板引擎整合SpringBoot时,对于从controller层传递过来的参数“message”,无法获取。
控制层代码如下:
@PostMapping("/login")
public String login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
RedirectAttributes attributes){
User user = userService.checkUser(username, password);
if (user != null){
user.setPassword(null);
session.setAttribute("user",user);
return "admin/index";
}else{
attributes.addAttribute("message","用户名或密码错误");
return "redirect:/admin";
}
}
页面获取message代码如下:
<!--校验登陆失败-->
<div class="ui mini negative message" th:unless="${#strings.isEmpty(message)}"
th:text="${message}">
</div>
仔细看了好久,开始以为是thymeleaf语法问题,后来查看官方文档没有问题。
再然后看前台页面时,看出了一些毛病;
发现返回的值在URL中,这时在https://www.cnblogs.com/zhujiabin/p/4935557.html这位前辈中,找到的错误,原来是对RedirectAttributes 这个类的方法理解不到位,它是springmvc3.1之后出现的专门用于重定向跳转时还能携带参数,只不过他的两个方法差别很大。
但是在此之前我还查了Model对象中设置的属性以及值,通过Thymeleaf获取时,获取失败,可能有以下几种原因:
1、首先检查返回值,就比如我这个方法返回值是String,因此如果你在这个方法中使用Model设置值是在页面取不到的。可以将返回值改为Model或者Object类型。
@PostMapping("/login")
public Object login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
Model attributes){
User user = userService.checkUser(username, password);
if (user != null){
user.setPassword(null);
session.setAttribute("user",user);
return "admin/index";
}else{
attributes.addAttribute("message","用户名或密码错误");
return attributes;
}
}
2、第二种就是将一个controller中的请求转发或重定向到另一个controller,这时应该注意的是接收数据的类型,或者使用@ModelAttribute注解指明想要获取的参数名。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章