【问题标题】:Neither BindingResult nor plain target object for bean name 'bookDto' available as request attributeBean 名称“bookDto”的 BindingResult 和普通目标对象都不能用作请求属性
【发布时间】:2019-10-29 00:03:50
【问题描述】:

我正在使用 spring boot 和 thymeleaf,当我在成功登录后返回索引页面时,我不断收到“Bean name 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">

【问题讨论】:

  • 你在哪里为 BookDto 声明了 bean?
  • 我不确定你的意思,但 BookDto 不是 bean,它只是 pojo

标签: java spring-boot thymeleaf


【解决方案1】:

bookDto 作为请求正文发送,因此您必须像这样获取它

public ModelAndView searchBooks(BookDto bookDto, Model model) {

只需删除@ModelAttribute

但是你必须确保 bookDto get 的初始化! 因此,当您导航到索引页面时,您必须创建一个新的 BookDto:

modelAndView.setViewName("index");
model.addAttribute("bookDto", new BookDto());

【讨论】:

  • 感谢您的回复,但它仍然给我同样的错误。我添加了@ModelAttribute,因为 bookDto 在视图中填充并用于按属性过滤书籍
  • 第一次导航到搜索页面时bookDto是如何生成的?
  • 也许我不够清楚,因为我没有发送整个代码。我的索引页面包含两个输入字段来搜索我的书籍(按标题和年份),这是我需要 bookDto 的地方,下面是数据库中我所有书籍的列表。
  • 我已经这样做了。索引页工作正常。用户登录后返回索引页面时出现错误。我已经在开头提供了登录方法的代码
  • 哦,我明白你的意思了,你是对的。我还没有在登录方法中初始化 BookDto。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 2015-08-31
  • 2013-04-04
  • 2011-11-25
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多