0

Spring でエラーをチェックする前に BindingResult に値を追加できますか?

@InitBinder("memberrequest")
    public void initMemberRequestBinder(WebDataBinder binder) {
        binder.setValidator(new MemberRequestValidator());
    }


@PreAuthorize("isAuthenticated()")
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView saveRequest(@Valid @ModelAttribute("memberrequest") MemberRequest mr, BindingResult result, HttpSession session) {

        session.setAttribute("phone", mr.getPhonenumber());

        mr.setWelfare((String)session.getAttribute("welfare"));
        mr.setSchool((String)session.getAttribute("school"));
        mr.setTitle((String)session.getAttribute("title"));
        mr.setDistrict((String)session.getAttribute("district"));
        mr.setName((String)session.getAttribute("name"));
        mr.setFile((String)session.getAttribute("file"));
        mr.setQueue((String)session.getAttribute("queue"));
        mr.setRequestor(getUser());
        mr.setSchool_id((String)session.getAttribute("school_id"));
        mr.setBorough_id((String)session.getAttribute("borough_id"));
        mr.setRetiree((String)session.getAttribute("retiree"));


        if (result.hasErrors()) {
            LOGGER.debug("Pages had errors on it... returning to input page");
            return new ModelAndView("w-question");
        } else {

Springコントローラーに上記のコードがありますが、問題は、Validatorが実行される前に、セッションからいくつかの値を取り出してBindingResult(Bean)に移動する必要があることです..

これは誰かにできますか?問題は、私がセッションで保持している値の一部です..これがいけないかどうか、そしてどのように行うのが最善の方法であるかを教えてください..

4

1 に答える 1

2

コントローラーで、モデル属性を作成するメソッドを定義し、 @ModelAttribute アノテーションで注釈を付けます。実際には、バインディング結果オブジェクト自体を変更するのではなく、検証ターゲットを変更してから、バリデーターの動作を変更して、必要に応じてバインディング結果を変更できます。

@ModelAttribute("memberrequest")
public  MemberRequest getMemberRequest(HttpSession session) {
MemberRequest mr = new MemberRequest();
  mr.setWelfare((String)session.getAttribute("welfare"));
    mr.setSchool((String)session.getAttribute("school"));
    mr.setTitle((String)session.getAttribute("title"));
    mr.setDistrict((String)session.getAttribute("district"));
    mr.setName((String)session.getAttribute("name"));
    mr.setFile((String)session.getAttribute("file"));
    mr.setQueue((String)session.getAttribute("queue"));
    mr.setRequestor(getUser());
    mr.setSchool_id((String)session.getAttribute("school_id"));
    mr.setBorough_id((String)session.getAttribute("borough_id"));
    mr.setRetiree((String)session.getAttribute("retiree"));
return mr;

}

このメソッドはバインディングが発生する前に呼び出されますが、このメソッドは @ModelAttribute("memberrequest") をパラメーターとして使用している各コントローラー メソッドの前に呼び出されることに注意してください。

于 2013-04-19T06:09:22.973 に答える