我正在使用Spring Boot和thymeleaf,并且在成功登录后返回索引页面时,我始终得到“ Bean名称bookDto
的BindingResult和普通目标对象均不可用作请求属性”
奇怪的是,当我以localhost:8080/index
搜索索引页时,索引页可以正常工作。
我还尝试过从登录方法返回另一个页面,并且只有它返回给我错误的索引页面。
下面是我的控制器方法和index.html表单
@RequestMapping(value = "/login")
@PostMapping
public ModelAndView login(@ModelAttribute("loginForm") LoginForm loginForm, ModelAndView modelAndView, BindingResult bindignResult) {
AppUser userLoggedIn = userService.findByUserNameAndEncryptedPassword(loginForm.getUsername(), loginForm.getPassword());
if (userLoggedIn == null){
modelAndView.addObject("errorLogin", "Incorrect Credentials!");
modelAndView.setViewName("signin");
}else {
modelAndView.setViewName("index");
}
return modelAndView;
}
按图书属性过滤图书
@RequestMapping(value = "/search")
@PostMapping
public ModelAndView searchBooks(@ModelAttribute ("bookDto") BookDto bookDto, Model model) {
model.addAttribute("books", bookService.listAll(searchFilterBuilder.buildFilter(bookDto)));
model.addAttribute("bookDto", bookDto);
return new ModelAndView("index");
}
最后是我的index.html
<form th:object="${bookDto}" th:action="@{/search}" method="post">
答案 0 :(得分:0)
bookDto作为请求正文发送,因此您必须像这样获取它
public ModelAndView searchBooks(BookDto bookDto, Model model) {
只需删除@ModelAttribute
但是您必须确保bookDto得到初始化! 因此,当您导航到索引页面时,必须创建一个新的BookDto:
modelAndView.setViewName("index");
model.addAttribute("bookDto", new BookDto());