일반 SimpleFormController 정리

황제낙엽 2007.09.19 12:11 조회 수 : 1816 추천:137

Spring Framework/Spring MVC

2007/03/05 21:11

 

1. 구현 절차
1) SimpleFormController 상속(extends)
2) formView, successView 속성 설정
3) 서비스 객체 설정
4) doSubmitAction() 메소드 구현

[이하 선택적]
5) referenceData() 오버라이딩: 셀렉트(drop-down box)나 체크박스 그룹을 표시하기 위해 오퍼레이션이 필요할 때
6) formBackingObject() 오버라이딩: commandClass의 인스턴스를 form 바인딩을 위한 객체(form backing object)로 사용하는 것을 변경하고 싶을 때

2. 설정 가능한 프로퍼티
- commandClass: 설정한 클래스의 인스턴스를 기본 form-backing 객체로 사용함. 부모 클래스의 formBackingObject() 구현1 에 의하면 디폴트 생성자로 commandClass 인스턴스를 생성한다.
- formView, successView: 폼(form)을 포함하는 뷰와 폼 제출 및 처리 이후에 보여질 뷰의 논리적 이름. 더블 서밋 문제 해결을 위해서 successView 이름 앞에 redirect: 접두어를 붙이면, POST 이후에 연이러 GET 요청을 발생시켜서 form이 재전송 되는 것을 방지해준다.
- sessionForm: 폼이 처음 보여질 때 새로운 객체를 생성할 것인지와 세션에 객체를 저장할지 여부를 결정. 커맨드 객체가 DB 오퍼레이션을 요구하는 경우처럼 성능 이슈가 있는 경우는 true를 고려해봐야 한다. 디폴트는 false
- bindOnNewForm: true로 설정하여 새로운 폼이 보여지는 시점에서 바인딩이 이뤄지게 할 수 있다. 디폴트는 false.
- validators: 데이터 바인딩 이후의 validation 작업을 수행할 객체 지정
- validateOnBinding: 디폴트는 true이며, false 지정시 validation이 일어나지 않음
- commandName: 디폴트인 command를 다른 이름으로 변경하고자 할 때

3. 웍플로우 및 웍플로우 수정을 위한 콜백/템플릿 메소드
Expert Spring MVC and Web Flow 151쪽의 다이어그램을 보면 SimpleFormController의 웍플로우를 알 수 있다. 이글에서는 주요 콜백/템플릿 메소드의 용도에 초점을 맞춰서 살펴본다.
- Map referenceData(): 커맨드 객체 이외의 데이터가 필요할 때. 셀렉트 박스나 체크박스 그룹 등.
- initBinder(): 바인터에 Custome property editor 등록하는데 사용.
- onBind(): 고유의 바인딩 방안을 적용하려고 할 때 사용. 자바 스크립트나 hidden 필드를 없앨 수 있다.
- onBindAndValidate(): Validator 없이 혹은 Validator로는 불가능한2 validation을 수행하고자 할 때.
- ModelAndView onSubmit(), void doSubmitAction(): 데이터바인딩과 validation이 성공한 이후에 호출
- isFormChangeRequest(): 폼 제출 이전에 화면 변화가 필요한 경우. 가령, 국가를 선택한 이후에 관련 도시가 나타나는 폼을 처리하는 경우가 예가 된다.


참고
- Professional Java Development with the Spring Framework 467-474쪽
- Spring Framework 2.0.2 소스 코드
- Expert Spring MVC and Web Flow 151쪽

  1. AbstractFormController.formBackingObject()에 정의되어 있으며, BaseCommandController.createCommand() 호출을 통해 command 객체 생성이 이뤄진다. [본문으로]
  2. ServletRequest를 직접 사용하는 [본문으로]

 

번호 제목 글쓴이 날짜 조회 수
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 5083
84 @ConfigurationProperties 사용하기 황제낙엽 2025.10.23 1617
83 Spring Boot 에서 서버 로직의 역할별 애노테이션 구분 황제낙엽 2025.10.13 1411
82 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) file 황제낙엽 2023.12.23 2817
81 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 2575
80 Eclipse, Spring Boot, Gradle, SVN 레거시(2019) 시스템 유지보수 환경 구축 file 황제낙엽 2023.11.14 1732
79 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 1691
78 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 1896
77 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 2053
76 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 2093
75 Spring MVC configuration file 황제낙엽 2024.01.17 2041
74 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 1595
73 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 2016
72 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 1922
71 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 2056
70 spring-security-samples 황제낙엽 2023.12.22 1800
69 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 1803
68 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 2308
67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 2079
66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 2208
65 Spring Security OAuth 황제낙엽 2019.09.05 2442