JSP파일에서는 schoolVO. 으로 앞글자를 소문자로한 VO의 이름으로 호출한다.
schoolVO.id를 이용해 Controller에서 Command객체를 이용해 입력한 값을 불러오자
화면에 값이 잘 표기되는 것을 볼 수 있다.
${ } <--- EL 표기법 !!
방법1 . ${ boardList.id } <-- 권장 방법
방법2 . ${ boardList.getId() } <--- JSP 에서 EL 로 변경할때는 편하다.
2. @ModelAttribute
스프링 컨테이너가 생성하는 Command객체의 이름은 클래스의 이름을 첫 글자를 소문자로 변경한 이름이 자동 설정된다. 그런데 이부분이 혼란이 생길 수 있어서
확실하게 내가 사용하고자 하는 이름을 지정해버릴 수 있다.
이때 @ModelAttribute 를 사용하면 된다.
@ModelAttribute로 이름은 "school"로 지정해준다.
JSP파일에서도 schoolVO대신 지정한 이름인 school로 호출한다.
결과확인
3. Controller의 리턴타입
기존에는 String 과 ModelAndView 의 두가지 리턴타입을 혼용했다.
하지만 이제는 String으로 통일하고 싶다.
ModelAndView 리턴타입을 String으로 변경하고 매개변수 ModelAndView를 Model로 사용하면 된다.
결과확인
그렇다면 ModelAndView 와 Model의 차이점이 무엇일까?
'데이터만 저장한다 vs 데이터와 이동하고자 하는 View Page를 같이 저장한다.'
의 차이점을 가지고있다.
ModelAndView는 기존 코드에서 볼 수 있듯 return할 View페이지를 같이 저장하고 있다.
이름처럼 View 부분이 포함되는 것이다.
하지만 View가 사라진 Model형은 addAttribute를 통해서 데이터만 저장한다.
참고자료
Model, ModelMap 차이점
Model - 인터페이스
ModelMap - 클래스
4. 기타 어노테이션 (@RequestParam)
Command 객체를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다.
하지만, 이를 위해서는 반드시 요청 파라미터와 매핑될 변수와 Setter 메서드가 Command 클래스에 반드시 선언되어야한다.
즉, 한두번 사용하기 위해서 VO 클래스에 Setter/Getter를 하나하나 전부 추가하기 번거롭다는 뜻이다.
예를 들어 목록보기의 검색창 부분에 사용하던 ch1 , ch2 같은 변수같은 것들은 매번 사용하는 변수가 아니기때문에 @RequestParam을 이용하면 좀 더 간편하다.