frontcontroller인 dispatcherServlet 내의 doDispatch 함수에선
핸들러실행함수의 반환값이 modelandview인데
다음과 같은 코드에서는 model 따로 view(여기서는 string으로 viewname) 따로
처리가 됩니다..
제가 놓친부분이 어디가 있을까요?. 답변 정말감사드림니다..
@Controller
@RequestMapping("springmvc/v3/members")public class SpringMemberControllerV3 {
private MemberRepository memberRepository=MemberRepository.getInstance();
//@RequestMapping(value = "/new-form",method = RequestMethod.GET)
@GetMapping("/new-form")
public String newForm(){
return "new-form";
}
//@RequestMapping(method=RequestMethod.GET)
@GetMapping
public String members(Model model) {
List<Member> members=memberRepository.findAll();
model.addAttribute("members",members);
return "members";
}
메소드 리턴타입에따라 그냥 다른거같은디용 stirng일땐 뷰네임리턴 리턴타입이 모델앤뷰일땐 모델엔뷰 리턴 둘중뭘쓰던상관없지 싶슴다
저는 초보인데 members(Model model) 함수를 호출할때 콜바이레퍼런스 형태여서 코드의 반환은 뷰(문자열)만 해도 호출하는 함수에서 넣을려는 members의 정보도 알수있는게 아닐까요...?
그래서 doDispatch()에서 뷰(문자열)정보와 모델클래스의 에트리뷰트값을 modelAndView 클래스로 취합하여 반환하는게 아닐까 생각해요
모델따로 뷰따로가 무슨 말인지 모르겠는데.. 지금 String으로 반환때리고 그냥 Controller니까 ViewName을 반환하는거잖아.
그리고 위 코드와 별개로 스프링 내부 박스에서 동작하는 거 이야기라고 하면, 핸들러에서 값을 반환할 때 ReturnValueResolver라는게 있어서 값을 바인딩해서 반환해줌. 그래서 핸들러에서 값을 반환 받기 전에 하나 계층이 더 있어서 값을 바인딩 해준다고 이해하면 됨. 현재 너가 올린 코드에서는 viewName / Model 따로 리턴되는 게 맞음.