Model객체는 그냥 메소드의 매개변수에서 생성해서 서블릿의 Request 대용 정도로 쓰고 있었다
근데.. 다음 코드를 마주쳤다..!
$(".btn-warning").on("click",function(){
formObj.attr("action",'/board/modifyPage');
formObj.attr("method","get");
formObj.submit();
});
@RequestMapping(value="/modifyPage", method=RequestMethod.GET)
public void modifyGET(@RequestParam("bno") int bno,
@ModelAttribute("cri") Criteria cri,
Model model) throws Exception {
model.addAttribute(service.read(bno));
}
간단히 설명하자면 특정 버튼을 누르면 form에 저장해두었던 어떤 변수값들을 get으로 위 컨트롤러의 메소드에 전송한다. 그리고 Model객체를 생성하여 addAttribute를 통해 값을 세팅해준뒤 jsp로 넘겨준다.
그런데 이해가 안되었던점이, jsp에서 사용하는 변수에 service.read(bno)를 통해 구한 결과가 아닌, 즉 addAttribute()하지 않은 변수도 사용할 수 있었다는거다! 서블릿의 Request에서 이런건 불가능했었다. 완전 멘붕
근데 그냥 Model객체를 공부 안한거였다.
이참에 알아보자!
직접 생성해줄 필요없다. 파라미터로 선언해주면됨
스프링 MVC는 JavaBeans 규칙에 맞는 객체는 자동으로 화면에 전달해준다
JavaBeans규칙에 맞는다 = 생성자가 없거나 빈 생성자를 가지며,getter/setter를 가진 클래스들의 객체를 의미한다.
(주의) 기본자료형은 파라미터로 선언되었더라도 화면에 자동으로 전달되지 않는다. 따라서 addAttribute() 하거나 @ModelAttribute를 사용한다