【问题标题】:Spring mvc form error not comng on jspSpring mvc表单错误没有出现在jsp上
【发布时间】:2016-07-07 06:10:33
【问题描述】:

我正在尝试验证登录表单。单击登录按钮后,控件进入我的控制器类,在 BindingResult 的帮助下,我也知道我的字段有错误,但我无法在我的 jsp 页面上显示错误。我试过rejectValue方法,但是我的jsp页面抛出异常,属性不可读e.t.c

这是我的模型类。

public class UserBean
{
  @NotEmpty
  private String username;
  @NotEmpty
  private String password;

  public String getPassword()
  {
    return this.password;
  }

  public String getUsername()
  {
    return this.username;
  }

  public void setUsername(String username)
  {
    this.username = username;
  }

  public void setPassword(String password)
  {
    this.password = password;
  }  
}

这是我的 JSP 页面。

<form:form method="POST" modelAttribute="login-entity"
    action="process-login.html">
    <table>
        <tr>
            <td><form:label path="username">username:</form:label></td>
            <td><form:input path="username" /></td>
            <td><form:errors path="username" /></td>
        </tr>
        <tr>
            <td><form:label path="password">password:</form:label></td>
            <td><form:input path="password" /></td>
            <td><form:errors path="password" /></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Login" /></td>
        </tr>
    </table>
</form:form>

这是我的控制器类。

@RequestMapping(value = "/process-login", method = RequestMethod.POST)
  public ModelAndView processLogin(@Valid UserBean loginModel,BindingResult bindingResult, Model model)
  {
    if(bindingResult.hasErrors())
    {
      ModelAndView errorView = new ModelAndView("loginpage");
      bindingResult.rejectValue("username","invalid username");
      bindingResult.rejectValue("password","invalid password");
      errorView.addObject("login-entity", bindingResult.getModel());
      return errorView;
    }
    return new ModelAndView("redirect:/some_other_page","","");
  }

经过调试,我的最终错误视图对象包含这个东西。

ModelAndView: reference to view with name 'loginpage'; model is {login-entity={userBean=UserBean [userId=0, username=, password=], org.springframework.validation.BindingResult.userBean=org.springframework.validation.BeanPropertyBindingResult: 4 errors
Field error in object 'userBean' on field 'username': rejected value []; codes [NotEmpty.userBean.username,NotEmpty.username,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userBean.username,username]; arguments []; default message [username]]; default message [may not be empty]
Field error in object 'userBean' on field 'password': rejected value []; codes [NotEmpty.userBean.password,NotEmpty.password,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userBean.password,password]; arguments []; default message [password]]; default message [may not be empty]
Field error in object 'userBean' on field 'username': rejected value []; codes [invalid username.userBean.username,invalid username.username,invalid username.java.lang.String,invalid username]; arguments []; default message [null]

有人可以帮忙吗?我想我错过了一些非常基本的东西。

【问题讨论】:

    标签: java spring jsp spring-mvc


    【解决方案1】:

    从控制器重定向到 .jsp 页面时,您可以向请求添加一个属性并为其分配错误消息 (ServletRequest.setAttribute(String var1, Object var2);) 然后在你的jsp页面中,查找属性并相应地处理错误信息

    【讨论】:

      【解决方案2】:

      你必须添加@ModelAttribute注解,并且你不能创建一个新的ModelAndView,因为新模型不会有绑定结果错误。以下应该适合你

       public ModelAndView processLogin(@ModelAttribute("login-entity") @Valid UserBean loginModel,BindingResult bindingResult, Model model)
      

      这样,模型中的错误将变为可用,并且查找键将与 form:errors 标记中的预期匹配

      关于模型部分,你应该简单地做一些类似的事情

        if(bindingResult.hasErrors())
          {
            return null; // calling page
          }
      

      消息会在那里

      【讨论】:

      • 感谢您的回复,所以在这样做之后我应该如何将错误发送回jsp。我应该使用相同的 BindingResult 技术吗?
      • 事实上不,可能还有更重要的一点,因为你使用它的方式,你正在破坏你的模型。编辑了一个答案
      【解决方案3】:

      你可以像这样先定义你的模型属性,

      @ModelAttribute("UserBean")
      public UserBean userCriteria() {
          return new UserBean();
      }
      

      来自控制器

      public ModelAndView processLogin(@ModelAttribute("UserBean") @Valid UserBean loginModel,BindingResult bindingResult, Model model)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2014-12-05
        • 2017-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        相关资源
        最近更新 更多