본문 바로가기
Programming/Spring

Spring 태그 <form:form> <form:select>

by 막이 2015. 6. 10.

전자정부나 스프링에서 Form을 사용할 경우 <fom:form>형태로 사용되는 form tag를 자주보게 된다. 오늘은 스프링에서 제공하는 tag에 대해 정리해 본다. 


1. <form:form>

1) spring 폼 태그를 사용하기 위해서는 spring-form.tld파일이 필요하고 이는 spring-webmvc-2.5.2.jar 파일에 포함되어 있다. 이 폼 태그를 사용하기 위해서는 JSP 페이지에 taglib을 추가해줘야한다.


<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

2) 'form'태그는 데이터 바인딩을 위해 태그 안에 바인딩 path를 지정해 줄 수 있다. 이 패스를 처음보면 많이 이상한데 사용하다보면 상당히 편한 기능이다. path에 해당되는 값은 도메인 모델의 Bean 객체를 의미한다. 사용예는 다음과 같다. 

<form:form commandName="user">
    userId : <form:input path="userId" />
</form:form>
또한 spring form 태그를 이용하기 위해서는 각각의 입력 path값에 매칭될 도메인 객체를 지정해 줘야 하는데 form태그 안에 commandName 속성으로 다음과 같이 지정해 줄 수 있다.

<% request.setAttribute("user", sample.services.UserVO())%>
이러한 commandName의 기본값은 "command"이며 input값들과 매칭될 도메인 객체를 request값으로 세팅해 줘야한다. 이 값은 SimpleFormController를 사용할 경우 FormBackingObject()메소드에서 지정해 줄 수도있다.

protected Object formBackingObject(HttpServletRequest request)
	throws Exception {
	UserVO vo=new UserVO();
	request.setAttribute("user",vo);
	return new UserVO();
}
2. <form:select> 태그  
select tag도 위의 checkboxes tag나 radiobuttons tag 처럼 items 속성을 이용하여 formBackingObject에서 넘겨주는 값으로 자동 매핑 시켜줄 수 있다.  

protected Object formBackingObject(HttpServletRequest request)
 	throws Exception {
	UserVO vo=new UserVO();
	Map address =new HashMap();
       address.put("seoul","서울");
       address.put("daegu","대구");
       address.put("busan","부산");
       request.setAttribute("address",address);
 	request.setAttribute("user",vo);
        return new UserVO();
}
HTML에서는 다음과 같이 사용한다. 
<tr>
	<td>주소</td>
	<td><form:select path="address" items="${address}" /></td>
</tr>
* <form:option> 태그 이용 --> 일반적인 경우에 해당 
<tr>
	<td>주소</td>
	<td><form:select path="address">
		<form:option value="seoul" label="서울" />
		<form:option value="daegu" label="대구" />
		<form:option value="busan" label="부산" />
	</form:select></td>
</tr>

* <form:options> 태그 
<tr>
	<td>주소</td>
	<td><form:select path="address">
		<form:options items="${address}" />
	</form:select></td>
</tr>