0

jsp ページに表示されるスプリング検証エラーを取得できません。これが私のコードです。jsp ページで空の名前を入力すると、コントローラ コードは ModelAndView をエラーで返しますが、それは jsp ページに表示されません。

どんな助けでも大歓迎です。ありがとうございました!

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST)
public ModelAndView editTag(@ModelAttribute("Tag") Tag tag) {
    BindingResult result = new BeanPropertyBindingResult(tag, "tag");
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required");
    if (result.hasErrors()) {
    return new ModelAndView("tag.edit").addObject("tag",tag).addObject("errors", result);
    }

    tagDao.merge(tag);

    return new ModelAndView("redirect:/tags/listTags.htm");
}




<form:form commandName="tag">
    <form:errors path="name"/><br />
    <form:input path="name" size="30" />
    ...
</form:form>
4

2 に答える 2

1

新しい BindingResult を作成していますが、Spring によって既に提供されている (およびバックグラウンドで使用されている) ものがあります。@ModelAttribute 注釈付きパラメーターの直後にメソッドに BindingResult を追加するだけで、これが得られます。次に、結果からモデルを取得し、それを使用して ModelAndView を構築できます。

また、ModelAttribute 名 (現在はタグ) がフォーム (タグ) で使用されているものと一致しないことにも注意してください。これらの 2 つは一致する必要があります。

次のようなものが機能するはずです。

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST)
public ModelAndView editTag(@ModelAttribute("tag") Tag tag, BindingResult result) {
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required");
    if (result.hasErrors()) {
      return new ModelAndView("tag.edit", result.getModel());    
    }

    tagDao.merge(tag);

    return new ModelAndView("redirect:/tags/listTags.htm");
}
于 2013-08-20T13:50:47.903 に答える
0

これを試すことができますか

public ModelAndView editTag(@ModelAttribute("Tag") Tag tag,BindingResult result) {
 result = new BeanPropertyBindingResult(tag, "tag");
于 2013-08-19T18:30:40.483 に答える