2016-03-20 15 views
4

ログインフォームを検証しようとしています。ログインボタンをクリックすると、コントロールは私のコントローラクラスに来て、BindingResultの助けを借りて私のフィールドにエラーがあることがわかりましたが、私のJSPページにエラーを表示することができません。私はrejectValueメソッドを試しましたが、私のJSPページで例外がスローされ、そのプロパティは読み込み不可能です。e.t.cjspでspring mvcフォームエラーが発生しない

私のモデルクラスです。

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] 

誰かが助けてくれますか?私はいくつかの非常に基本的なものが欠けていると思う。

答えて

0

コントローラから.jspページにリダイレクトしてエラーメッセージを割り当てると、リクエストに属性を追加できます(ServletRequest.setAttribute(String var1、Object var2);) 次にJSPページで、それに応じてエラーメッセージを処理してください。

0

注釈を追加する必要があります。新しいモデルにはバインド結果errosがないため、新しいModelAndViewの名前を作成しないでください。あなた

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

ため、この方法を考え出す必要があります後、エラーがモデルで利用可能となり、検索キーは、あなたは、単に何かをすべきモデルの一部についてform:errorsタグ

に期待されているものと一致します以下のような

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

とメッセージが

+0

返事のおかげで、ので、どのように私は戻って、JSPにエラーを送信しなければならないことをやりました。私は同じBindingResult技術を使用する必要があります。 –

+0

実際にはそうではないかもしれないが、あなたがそれを使う方法から、あなたのモデルを破壊しているので、もっと重要な点があるかもしれない。回答を編集しました –

0

あなたはちょうどそのよう最初にモデルの属性を定義することができるだろう、

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

とコントローラ

から
public ModelAndView processLogin(@ModelAttribute("UserBean") @Valid UserBean loginModel,BindingResult bindingResult, Model model) 
関連する問題