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
를 사용한다