Spring MVC:BindingResult和bean名称'user'的普通目标对象都不可用

时间:2017-10-15 07:49:03

标签: java spring spring-mvc thymeleaf

我正在使用Spring MVC,我收到以下错误:

  

引起:java.lang.IllegalStateException:BindingResult和bean名称'user'的普通目标对象都不可用作请求属性

当我们没有在控制器代码中传递/添加模型中的对象时,通常会发生此错误。但我已经这样做了,我仍然得到错误。

我在互联网上查看了具有完全相同错误的解决方案,但所有这些都指向在控制器中添加新对象。不知道为什么对我来说它不起作用。

不确定我做错了什么。

这是我在login.html中的表单:

if(...) yes else no

我的Controller.java:

<div class="container">
  <div class="starter-template">
    <h2>Login</h2>
  </div>

  <form th:object="${user}" th:method="post" th:action="validateUser" class="form-horizontal">
    <table class="table table-striped">
      <tr>
        <td>
          <div class="control-group">
            <label class="control-label">Email</label>
          </div>
        </td>
        <td>
          <div class="controls">
            <input type="text" class="form-control" th:field="*{emailAddress}"/>
            <label class="control-label"></label>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div class="control-group">
            <label class="control-label">Password</label>
          </div>
        </td>
        <td>
          <div class="controls">
            <input type="password" class="form-control" th:field="*{password}"/>
            <label class="control-label"></label>
          </div>
        </td>
      </tr>
      <tr>
        <td></td>
        <td>
          <div class="form-actions pull-right">
            <input type="submit" name="_eventId_validateUser" value="Login"
                   class="btn btn-success" tabindex="5"/>
            <input type="submit" name="_eventId_cancel" value="Cancel"
                   class="btn btn-danger" tabindex="6"/>
          </div>
        </td>
      </tr>
    </table>
  </form>
</div>

1 个答案:

答案 0 :(得分:2)

在您的html表单中,您具有约束力

th:object="${user}" // user

另一方面,您在控制器方法userBO中默认绑定processLoginInfo

你的方法应该是这样的

@RequestMapping(value="/validateUser" , method=RequestMethod.POST)
public String processLoginInfo(@ModelAttribute("user") UserBO userBO) throws ServiceBusinessException {
    UserBO user = authenticationService.authenticateUser(userBO.getEmailAddress(), userBO.getPassword());

    return "userDetails";
}