zoukankan      html  css  js  c++  java
  • 关于使用th:text获取不到值

    今天在使用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之后出现的专门用于重定向跳转时还能携带参数,只不过他的两个方法差别很大。

    1. addAttribute()是直接将参数和值一块拼接到了URL中,然后再从页面或者前端控制器中取出URL后面的参数值,因此这是很不安全的,后台的一些信息直接显示给了用户。
    2. 另个方法 addFlashAttribute();它也能重定向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上清除session。但是这也有缺点,就是只能在页面中获取。但到这里就可以解决我的问题了,将addAttribute改为addFlashAttribute。

    但是在此之前我还查了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注解指明想要获取的参数名。

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121964.html
Copyright © 2011-2022 走看看