我是Thymeleaf的新手,我正在尝试检查模板中的null属性
<form th:action="@{/saveUser/__${user.id}__}" th:object="${user}" method="post">
如果我正在编辑已定义ID的现有用户,表单会提交正常,但是使用相同的表单添加新用户我得到以下内容
HTTP Status 400 - http://localhost:8080/myApp/saveUser/null"
我的控制器:
@RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("user") User user, @PathVariable Long id, Model model) {
model.addAttribute("user", user);
userRepo.save(user); //JPA Repo
return "success";
}
我的想法是,如果我可以检查null id,我可以以某种方式插入一个独特的。更好的是,如果我可以使用我的用户对象ID上的@GeneratedValue
设置,那么我认为我的身体状况良好
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
编辑包括我的用户编辑表单方法,该方法返回相同的表单,但预先填充了用户的模型属性
@RequestMapping(value = "/edit/user/{id}", method = RequestMethod.GET)
public ModelAndView getUserEditForm(@PathVariable Long id, Model model){
ModelAndView mav = new ModelAndView("userForm");
User user = userRepo.findOne(id);
mav.addObject("userForm", user);
return mav;
}
编辑2 包括我的整个表单(ID为&#34;隐藏&#34;来自用户)
<form th:action="@{/saveUser/__${user.id}__}" th:object="${user}" method="post">
<input id="id" type="hidden" th:field="*{id}" />
<input id="id" type="text" th:field="*{name}" />
<input id="id" type="text" th:field="*{address}" />
<button id="save">Save</button>
</form>
答案 0 :(得分:1)
根据讨论,假设您调用的方法应该填充用户对象,因此提交时表单失败:
@RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("user") User user, @PathVariable Long id, Model model) {
model.addAttribute("user", user);
userRepo.save(user); //JPA Repo
return "success";
}
该方法不起作用的原因是因为您可能会传递一个空的用户对象。 要修复此问题,您需要实现检查以确保在调用页面之前对象不为空。
一个解决方案可能是:
@RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("user") User user, @PathVariable Long id, Model model) {
userRepo.save(user); //JPA Repo
if(user == null) // check if user object is empty
user = new User(); // if user is empty, then instantiate a new user object
model.addAttribute("user", user);
return "success";
}
以上将确保当您将用户对象传递给模型时,它始终可用。
答案 1 :(得分:0)
我通过在@Controller
的末尾创建一个新的@RequestMapping
接受“null”暂时解决了这个问题(在创建具有动态ID的新用户时哪种有意义?) ,只是重新实现相同的逻辑。所以当这个叫做
http://localhost:8080/myApp/saveUser/null“
它映射到我的新控制器
@RequestMapping(value = "/saveUser/null", method = RequestMethod.GET)
public ModelAndView saveUser(@ModelAttribute("user") User user, Model model){
model.addAttribute("user", user);
userRepo.save(user);
return "success";
}