1

動作中のアプリケーションにフォーム検証を追加しようとしています。まず、ログイン フォームに NotNull チェックを追加しました。Bean Validation api の Hibernate impl を使用しています。

これが私が書いたコードです

@Controller
@RequestMapping(value="/login")
@Scope("request")
public class LoginController {

  @Autowired
  private CommonService commonService;

  @Autowired
  private SiteUser siteUser;

  @InitBinder
  private void dateBinder(WebDataBinder binder) {
      SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
      CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
      binder.registerCustomEditor(Date.class, editor);
  }

  @ModelAttribute
  protected ModelMap setupForm(ModelMap modelMap) {
    modelMap.addAttribute("siteUser", siteUser);
    return modelMap;
  }

  @RequestMapping(value="/form", method = RequestMethod.GET)
  public ModelAndView form(ModelMap map){
    if (siteUser.getId() == null){
      map.addAttribute("command",new SiteUser());
      return new ModelAndView("login-form",map);
    }else {
      return new ModelAndView("redirect:/my-dashboard/"+siteUser.getId());
    }
  }

  @RequestMapping(value="/submit", method=RequestMethod.POST)
  public ModelAndView submit(@Valid SiteUser user, ModelMap map, BindingResult result){
    if (result.hasErrors()) {
      map.addAttribute("command", user);
      System.out.println("Login Error block");
      return new ModelAndView("login/form",map);
    }
    else {
      User loggedInUser = commonService.login(user.getEmail(), user.getPassword());
      if (loggedInUser != null) {
        siteUser.setId(loggedInUser.getId());
        siteUser.setName(loggedInUser.getName());
        System.out.println("site user attr set");
      }
      return new ModelAndView("redirect:/my-dashboard/"+loggedInUser.getId());
    }
  }
}

モデルは

@Component
@Scope("session")
public class SiteUser {
private Integer id = null;
@NotNull
private String name = null;
private String email = null;
private String password = null;
private List<String> displayPrivList = null;
private List<String> functionPrivList = null;
    // And the getters and setters
}

JSPは

    <c:url var="loginSubmitUrl" value="/login/submit"/>
    <form:form method="POST" action="${loginSubmitUrl}">
        <form:errors path="*" />
        <div class="row">
            <div class="span4">
            </div>
            <div class="span4">
                <h3>Please Login</h3>
                <label><span style="color:red">*</span>Email</Label><form:input path="email" type="text" class="input-medium" />
                <label><span style="color:red">*</span>Password</Label><form:input path="password" type="password" class="input-medium" />
                <br/>       
                <button type="submit" class="btn btn-primary">Login</button>
                <button type="button" class="btn">Cancel</button>
            </div>
        </div>          
    </form:form>

コンテキスト xml に messages.properties とアノテーション駆動型 Bean 定義を追加しました。この件に関する他の回答では、フォームフィールドが投稿されないことについて話しています。私の場合、これは予想される動作です。空白のフォームを送信すると、エラーが発生するはずです。

何が足りないか教えてください。

4

3 に答える 3

16

この質問にはあなたと同じ問題があったと思います

Spring MVC (hibernate Validator を使用) で無効なデータを含むフォームを送信すると、構文的に正しくないリクエストが送信されます。

指摘するだけ

引数の順序を変更する必要があります。BindingResult結果パラメーターは、常に@Value注釈付きのパラメーターの直後に置きます。

于 2013-03-26T15:33:27.467 に答える
1

これが必要です:<form:errors path="email" cssClass="errors" /> 同じ「パス」名を持つ各入力にタグform:errorsを使用します。

パスを設定しない場合は、すべてのエラーを同時に一覧表示することもできます。

ここでは、ダウンロードできるサンプルコードを含む完全な例を確認して、実行方法を学習して ください。http ://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

于 2013-02-07T14:54:38.307 に答える
0

<form:form>このように commandName を含めて を変更してみてください

     <form:form method="POST" action="${loginSubmitUrl}" commandName="user"> 
于 2013-02-06T23:10:37.180 に答える