ttoggai
30
2017-03-20 20:44:18.0
3
235

@modelattribute 사용법??


안녕하세요

스프링 초보입니다.

메소드파라미터에 선언된 userData는 뷰에서 사용자 아이디와 같은 값을 컨트롤러에 같이 넘겨주기위해 사용했고

그 아이디로 유저내용을 쿼리해온다음에 뷰로 반환하는 코드입니다.

여기서 궁금한점이 책을 보니 modelattribute는 뷰에서 컨트롤러로 데이터를 넘길때도 쓰지만 

컨트롤러에서 반환되는 뷰에도 그대로 모델에 추가해 넘어간다고 나와있는데

그럼 메소드파라미터에 선언된 userData와 서비스단에서 데이터를 쿼리해와서 객체에 담은 test2는 

같은 필드명을 가진 객체로 둘다 모델에 반환될텐데... 

뷰에서는 ${userData.name}  ${userData.address}이런식으로 활용할 경우

어떤 객체가 활용되나요??   메소드파라미터에 선언된 userData가 쓰이는지 

아니면 데이터를 쿼리해 추가한 데이터가 쓰이는지 궁금합니다.

그리고 뷰의 form태그를 쓸경우 path에 커맨드객체 이름을 적어야하는데... 아래처럼 코드를 짜니 제대로 인식을 못하는거같아서요..

@RequestMapping(value = "/userInfo.do")

public String getUserInfo(

HttpServletRequest request,

@ModelAttribute("userData") UserData userData, <-- 뷰에서 아이디값을 커맨드객체로 받음

BindingResult bindingResult, SessionStatus status, ModelMap model)

throws Exception {

                     UserData test2  = myService.getUserData(userData) ; <--아이디를 이용해 데이터쿼리해 객체에담음

                  model.addattribute("userData",test2)        <--모델에 담은후 반환 

                    return "view";

}

0
0
  • 답변 3

  • 전재형
    2k
    2017-03-20 22:10:19.0

    저는 모델어트리뷰트를 request param으로 받은 정보를 모델에 곧바로 넣을때

    코드를 압축시키기 위해서 자주 썼던것같네요


    구체적인 예를 들면 form에서 post로 받았을 때. 받은 정보를 모델어트리뷰트로 넣고, 

    validation에 실패하면 다시 form 페이지를 전달하면서

    input의 객체로 다시 넣는거죠


    0
  • xxrcn11
    913
    2017-03-21 00:16:48.0

    ttoggai 님이 의도하신게 맞습니다.

    새로운 객체가 생성되고 model에 attribute로 동일한 이름으로 등록되면 기존의 객체는 새로운 객체로 교체됩니다.

    먼저 객체의 교체 없이 view에서 넘오온 값이 제대로 인식이 되는지부터 확인을 해보세요

    인식에 문제가 없다면 교체해도 문제는 없습니다.

    부디 해결하시기 바랍니다.


    0
  • ttoggai
    30
    2017-03-21 19:16:05.0

    감사합니다 스프링이 쉬운듯하면서 어렵네요 ㅎㅎ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.