스프링 프레임워크는 정말 뛰어난 프레임워크지만 개발자가 부족한 시점에서는 애물단지가 되는 프레임워크 인것 같습니다.
하나의 페이지를 만들기 위해 XML수정부터 Controller, View, Service, Dao, 각종 Bean들 까지 만들고 있다 보면 내가 이 간단한것을 하기 위해 무엇을 하고 있는것인가 생각이 들곤 합니다.
그래서 간단하게 SimpleFormController를 사용할 수 있는 방법을 찾아보았습니다. 무의식중에 이렇게 개발하고 있었는데 외국의 사이트에서도 같은 형식으로 개발하는것을 많이 찾아볼 수 있더군요.
잘못된 방법은 아닌거 같습니다.
SimpleFormController
[code]public class SpringFormTestController extends SimpleFormController
{
private MemoService memoService;
public void setMemoService(MemoService memoService)
{
this.memoService = memoService;
}
public SpringFormTestController()
{
setCommandName(“testForm”);
setCommandClass(TestForm.class);
setFormView(“form”);
setSuccessView(“result”);
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
{
TestForm testForm = (TestForm) command;
MemoData memoData = new MemoData();
memoData.setName(testForm.getName());
memoData.setEmail(testForm.getEmail());
memoData.setMemo(testForm.getMemo());
SimpleDateFormat formatter = new SimpleDateFormat(“yy년MM월dd일 HH시mm분ss초”);
String date = formatter.format(new Date());
memoData.setDate(date);
memoService.insertMemo(memoData);
return new ModelAndView(getSuccessView()).addObject(“memoData”, memoData);
}
@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception
{
// 빈 객체를 생성하여 넘겨준다.
// 폼안에 내용이 필요할 경우 값을 이 메서드에서 추가하여 넘겨주면 된다.
return new TestForm();
}
}[/code]
JSP
[code]<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ko”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>Spring Form Controller Test</title>
</head>
<body>
<!–
컨트롤러의 setCommandName와 아래 form의 commandName이 일치하여야 함
form:input 의 path명은 setCommandClass에서 지정한 POJO빈 클래스의 맴버 변수명과 일치해야 함
–>
<form:form commandName=”testForm” method=”post”>
<span>이름 : <form:input path=”name”/></span>
<span>이메일 : <form:input path=”email”/></span>
<span>메모 : <form:input path=”memo”/></span>
<span><input type=”submit” value=”확인”/></span>
</form:form>
</body>
</html>[/code]
여기서 중요한점은 Controller와 Form태그의 데이터들이 완벽하게 1:1로 매핑 된다는것입니다.
formBackingObject 메서드를 이용해, 페이지가 처음으로 로드될때도 빈데이터를 매핑시켜야 합니다. 없을 경우 에러가 뜹니다.
만약에 데이터 수정창이었다면 데이터를 읽어와서 그 데이터를 리턴하면 됩니다. 바로 값이 뜨게 됩니다.
또한 Controller의 commandName과 Form태그의 commandName이 같아야 합니다. Controller에서는 setCommandName으로 설정하고 있습니다.
commandClass의 내부 변수명과 Form태그의 path명은 일치하여야 합니다.
commandClass에는 validate등의 기능을 구현할 수 있습니다.
1262697483.war