스프링 폼 태그란?
- 스프링 MVC와 연동되는 태그 라이브러리
- 폼에서 전달되는 파라미터 이름으로 Setter( ) 메서드를 작성한 클래스의 프로퍼티(필드 이름)에 접근할 수 있고 컨트롤러가 다루는 데이터를 참조할 수 있음
- 동적 웹 애플리케이션을 더 쉽고 편리하게 개발하고 유지 관리할 수 있다!
<form>
태그
<form:form 속성1="값1" [속성2="값2" ...]>
// 다양한 입력 양식 태그(<input>, <select>, <textarea>)
</form:form>
<form>
태그는 HTML의 <form>
태그와 다르게 modelAttribute 속성을 지원하여 <input>
이나 <hidden>
같은 태그들이 커맨드 객체의 프로퍼티(필드 이름)에 접근할 수 있게 함<form>
태그를 사용한 예로, HTML 코드를 열어 보면 다음과 같이 html의 <form>
태그로 출력됨<form:form modelAttribute="member">
...
</form:form>
<form:form>
태그의 method와 action 속성을 지정하지 않으면 다음과 같이 HTML로 출력되는 <form>
태그의 method 속성 값은 post로 설정되고, action 속성 값은 현재 요청 URL이 됨<form>
코드<form id="member" action="/chap07/member" method="post">
...
</form>
<form>
안에 사용하는 태그
<form:form>
태그 내 중첩되어 사용<form:form modelAttribute="커맨드 객체">
<form:태그 이름 path="커맨드 객체의 프로퍼티(필드)"/>
</form:form>
<form:form>
태그 내 modelAttribute 속성을 설정하면 중첩되는 <form:form>
태그에 반드시 path 속성을 설정해야 함(참고) 데이터 바인딩이란?
- 웹 페이지에서 전달되는 요청 파라미터 값을 동적으로 도메인 객체의 프로퍼티에 설정해 주는 것
- 웹 애플리케이션에서 사용자가 입력하여 웹 페이지로 문자열을 전달하는 경우, 해당 문자열로 전달된 파라미터는 도메인 객체의 프로퍼티 타입(int, boolean, char 등)에 맞게 변환해야 함
- 이렇게 사용자가 입력한 문자열 값을 프로퍼티 타입에 맞추어 자동으로 변환하여 할당하는 것을 데이터 바인딩이라고 한다!
public String 메서드 이름(@ModelAttribute 매개변수, Model model) {
// model.addAttribute(...);
return "뷰";
}
메서드 수준의 @ModelAttribute란?
컨트롤러 안에 @RequestMapping이 적용되지 않은 별도의 일반 메서드를 만들어 해당 메서드에 @ModelAttribute를 적용하는 것
@ModelAttribute("모델 속성 이름")
public String 메서드 이름() {
...
}
@ModelAttribute
public void 메서드 이름(Model model) {
//model.addAttribute(...);
}
뷰 페이지에서 공통으로 사용할 수 있는 커맨드 객체의 프로퍼티(멤버 변수, 필드)를 설정하여 뷰 페이지에 출력하는 역할 수행
웹 요청 URL을 처리할 수는 없으나 먼저 호출되며 컨트롤러 안에 여러 개 생성 가능
@InitBinder
public void 메서드 이름(WebDataBinder binder, ...) {
// 구현 생략
}
@InitBinder("커맨드 객체 이름")
public void 메서드 이름(WebDataBinder binder, ...) {
// 구현 생략
}
setAllowedFields( )
public void setAllowedFields("폼 파라미터 이름1", ...)
setDisallowedFields( )
setAllowedFields( )
의 반대 메서드public void setDisallowedFields("폼 파라미터 이름1", ...)