메뉴 건너뛰기

조회 수 1182 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

스프링프레임워크의 JSP 기술중에 form taglib 가 있습니다. form 태그라이브러리를 사용하면 HTML 폼에 데이터를 바인딩하거나 에러메세지 처리등을 간편하게 할 수 있습니다.




스프링프레임워크 form 태그라이브러리를 사용하기 위해서는 먼저 다음 taglib 설정을 페이지 상단에 추가합니다.


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



1. 옵션 없이 사용했을 경우 기본값


호출 URL이 /offbyone/boardForm.do 라고 가정하고, 옵션 없이 사용한 경우


form 태그:

<form:form></form:form>


결과 HTML:

<form id="command" action="/offbyone/boardForm.do" method="post"></form>


- id 속성은 "command" 가 기본값입니다.

- action 속성은 자기 페이지의 URL 입니다.

- method는 POST가 기본입니다



2. commandName과 modelAttribute 옵션


commandNamemodelAttribute 옵션은 폼에 있는 요소들의 값을 채우기 위해서 사용될 객체를 request 로부터 찾을때 사용할 이름을 지정합니다. 두 옵션은 동일한 기능을 합니다.


스프링프레임워크 4버전에서는 commandName을 잘 사용을 했었는데, 5버전에서는 다음과 같은 에러가 발생합니다.

Unable to find setter method for attribute: [commandName]


이때에는 commandName 대신에 modelAttribute 옵션을 사용해야 합니다.

form 태그:

<form:form commandName="boardVO"></form:form>

또는

<form:form modelAttribute="boardVO"></form:form>


결과 HTML:

<form id="boardVO" action="/offbyone/boardForm.do" method="post"></form>


일반적으로 폼에 사용되어지는 id와 name 속성은 modelAttribute와 별도로 지정하는 것이 편리할때가 많습니다.

<form:form id="boardForm" name="boardForm" modelAttribute="boardVO"></form:form>


결과 HTML:

<form id="boardForm" name="boardForm" action="/offbyone/boardForm.do" method="post"></form>



3. form 태그에서 사용될 모델 객체를 설정하는 방법


form태그의 commandName 또는 modelAttribute에서 지정되는 폼의 요소들에 값을 제공할 객체의 지정은 보통 컨트롤러에서 하게 됩니다.


@RequestMapping(value = "/boardForm.do", method = RequestMethod.GET)

public String boardForm(Model model) throws Exception {

    BoardVO boardVO = new BoardVO();

    boardVO.setTitle("제목 입니다.");

    model.addAttribute("boardVO", boardVO);

    return "boardForm";

}


model 객체에 commandName에서 사용된 이름으로 BoardVO객체를 설정하고 있습니다.


@RequestMapping(value = "/boardForm.do", method = RequestMethod.GET)

public String boardForm(@ModelAttribute BoardVO boardVO, Model model) throws Exception {

    boardVO.setTitle("제목 입니다.");

    return "boardForm";

}


컨트롤러 메소드의 인자에 @ModelAttribute 아노테이션을 사용하는 방법도 가능합니다. 이름을 별도로 지정하지 않으면 변수명이 commandName에서 사용될 명칭이 됩니다.


@RequestMapping(value = "/boardForm.do", method = RequestMethod.GET)

public String boardForm(@ModelAttribute("boardVO") BoardVO vo, Model model) throws Exception {

vo.setTitle("제목 입니다.");

    return "boardForm";

}


@ModelAttribute("boardVO") 처럼 이름을 지정하면 변수명(vo) 과 다른 이름을 사용할 수 있습니다.



form 태그에 commandName 또는 modelAttribute 속성을 사용하고 또한 폼요소를 사용하였는데, 컨트롤러에서 모델 객체를 설정하지 않으면 에러가 발생합니다.


form:input 요소 사용 :

<form:form modelAttribute="boardVO">

  <form:input path="title" />

</form:form>


에러발생 : 

ERROR: org.springframework.web.servlet.tags.form.InputTag -

Neither BindingResult nor plain target object for bean name 'boardVO' available as request attribute



4. 그외의 form 태그의 속성들

- id : 별도로 지정하지 않으면 commandName과 같은 값이 됩니다.


<form:form commandName="boardVO" id="boardForm"></form:form>


- name : 별도로 지정하지 않으면 commandName과 같은 값이 됩니다.


<form:form commandName="boardVO" name="boardForm"></form:form>


- action : 별도로 지정하지 않으면 현재 페이지의 주소가 됩니다.


<form:form commandName="boardVO" action="/boardInsert.do"></form:form>


※ 컨텍스트 패스를 URL앞단에 자동으로 붙이기 위해서 <c:url> 태그를 사용하는데, 스프링 form 태그의 action 속성에는 <c:url> 태그를 사용할 수 없습니다. 다음과 같은 방법을 사용합니다.


<form:form action="${pageContext.request.contextPath}/boardInsert.do"> ... </form>


또는


<c:url value="/boardInsert.do" var="insertUrl" />

<form:form action="${insertUrl}"> ... </form>


- method : 기본값을 post 입니다.


<form:form method="post"> ... </form>


- htmlEscape : 폼 요소에 들어가는 값들을 escape 할지 지정합니다. 기본값은 현재 페이지의 html escape 값입니다.


<form:form htmlEscape="true"> .. </form>


페이지의 기본 값지정 방법입니다.


htmlEscape tag 사용:

<spring:htmlEscape defaultHtmlEscape="true" />



web.xml 파일에서 지정 :

<context-param>

   <param-name>defaultHtmlEscape</param-name>

   <param-value>true</param-value>

</context-param>


- cssClass : 폼에 스타일을 지정하기 위해서 사용합니다.


<style>

.formStyle { margin:0; padding:0; }

</style>


<form:form cssClass="formStyle"> ... </form>


- cssStyle : 인라인 스타일을 넣습니다.


<form:form cssStyle="margin:0;padding:0;"> ... </form>


- enctype : 파일 업로드를 위한 속성 입니다.


<form:form enctype="multipart/form-data"> ... </form>


그외에 HTML form 태그에서 사용되는 onsubmit같은 자바 스크립트 이벤트 핸들러도 모두 사용할 수 있습니다. 그리고 모든 속성들에는 EL을 사용해서 실행시간에 값을 지정할 수 있습니다.


List of Articles
번호 제목 날짜 조회 수
43 첫 실행 URL 변경 file 2018.06.05 2715
42 전자정부프레임워크 설치 및 실행 file 2018.12.07 1384
41 전자정부프레임워크 사용 중 중복 저장 방지 (새로고침 혹은 뒤로가기시) 2018.06.12 3053
40 전자정부프레임워크 구조 파악하기 file 2018.06.02 4123
39 전자정부표준프레임워크 파일 업로드 크기 설정(feat. MaxUploadSizeExceededException) file 2019.02.28 1105
38 전자정부 프레임워크(eGovframe) 동적 웹프로젝트 시작하기(2) file 2017.09.12 4165
37 전자정부 프레임워크(egov framework) 설치하기(1) file 2017.09.12 5296
36 전자정부 표준프레임워크 파일업로드용량설정 file 2018.12.06 1892
35 이클립스에서 인코딩 설정 file 2018.06.21 2330
34 이클립스(Eclipse) 한글 언어팩 설치. Babel 프로젝트 file 2018.12.07 1199
33 이클립스(Eclipse) 소스 일괄 수정 file 2018.12.07 1097
32 이클립스 파일 찾기 & 문자열 검색 file 2018.06.21 2407
31 예제 따라하기(1) - 기본 서블릿 구현 file 2018.06.05 2922
» 스프링프레임워크 <form:form> 태그 사용법 file 2018.12.06 1182
29 스프링프레임워크 <form:form> 태그 사용법 file 2019.02.28 3514
28 스프링 CKEditor 적용 - 에디터 2018.06.12 5573
27 서버로부터 메시지 받아서 팝업 띄우기 (1. ModelAndView 이용) file 2021.03.09 574
26 로그인 체크 인터셉터 사용 (AuthenticInterceptor) 2016.09.21 6675
25 공통코드관리 2016.09.21 5762
24 개발자로서 기본 구성합니다. file 2016.08.18 4939
Board Pagination Prev 1 2 3 Next
/ 3

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved