thymeleaf数据绑定

第一次使用Thymeleaf特别不熟练

Thymeleaf的传参方式和JSP略有不同,经常报错,记录一下


用于表单数据对象绑定,将表单绑定到后台controller的一个JavaBean参数。常与th:field一起使用进行表单数据绑定。

首字母必须小写,比如 userInfo

1
th:object="${user}"


用于表单字段绑定,与JavaBean的成员属性名称一致;与th:object一起使用。

1
th:field="*{username}"


举例

1
2
3
4
5
6
7
8
9
<form action="#" th:action="@{/login}" th:object="${user}" method="post">

<input type="text" value="" th:field="*{username}" />

<input type="password" value="" th:field="*{password}" />

<button type="submit">登录</button>

</form>

控制层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   /**
* 跳转到后台登录页
*/
@RequestMapping("/system")
public String system() {
return "/login";
}


/**
* 登录功能
*/
@PostMapping("/login")
public String login(@ModelAttribute User user, Model model){
String username = user.getUsername();
String password = user.getPassword();
model.addAttribute("msg","测试");
return "/index";

报错

写了个简单的登录,结果登录页面都进不去,直接报错

1
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user'

原因

绑定不上’user’类,因为HTML里的 th:object=”${user}” 并没有定义

这里就跟JSP有区别了,JSP直接在页面中使用对象属性就可以了

Thymeleaf则是当你从控制层进入这个页面,就必须把这个对象传到前台

解决

所以在跳转到登录页的Controller上传一个空的对象即可

1
2
3
4
5
6
7
8
9
/**
* 跳转到后台管理登录页
*/
@RequestMapping("/system")
public String system(Model model) {
User user = new User();
model.addAttribute("user",user);
return "/login";
}
------本文结束感谢阅读------

本文标题:thymeleaf数据绑定

文章作者:churuo

原始链接:https://www.xuchuruo.cn/Thymeleaf参数绑定.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%