1

フォームの検証にSpringバリデーターを使用しています。これが私のコードの構造です。ご覧のとおり、POST メソッドで手動で validate を呼び出す必要があります。validate() を呼び出さずにバリデーターをフォーム処理に接続する方法はありますか?

私のドメイン オブジェクト (MyModel) は、@NotNull などのフィールド レベルの注釈がない POJO であることに注意してください。

助けてくれてどうもありがとう!

@Controller
public class FormTest extends MyController {

    .....

    @Autowired
    private MyValidator myValidator; // implementing Spring's Validator interface
    ......

    @RequestMapping(value={"/formtest"}, method=RequestMethod.GET)
    public String formGet(HttpServletRequest request, 
            @RequestParam(value="id", required = false) Long id,
            Map<String, Object> map) {
       return "/form";
    }

    @RequestMapping(value={"/formtest"}, method=RequestMethod.POST)
    public String formPost(HttpServletRequest request, 
            @ModelAttribute("command") MyModel m,
            @RequestParam(value="id", required = false) Long id,
            Map<String, Object> map,
            BindingResult result, 
            SessionStatus status) {

            myValidator.validate(m, result); //manual validation
            if (result.hasErrors()) { 
                return "/form";
            }

        service.saveMyModel(m);       
        return "redirect:/formtest?id=" + id;
    }

    @ModelAttribute("command")
    public MyModel backingObject(HttpServletRequest request, 
            @RequestParam(value="id", required = false) Long id) {
        MyModel m = null;
        if (id != null)
            m = service.getMyModel(id);
        else
            m = new MyModel();
        return m;
    }
}
4

1 に答える 1