본문 바로가기
Spring/JavaScript+Jsp(HTMl)

[ SpringFramework ] <form:form> 태그 란?

by snow_hong 2022. 3. 8.

form 태그 라이브러리를 사용하면 HTML 폼에 데이터를 바인딩 하거나 에러 메시지 처리 등을 간편하게 할 수 있다.

form 태그 설정

form 태그 라이브러리를 사용할 려면 jsp 상단에 설정을 해줘야 한다.

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

form 태그 (기본값 - 옵션 없음)

<form:form>
내용~~
</form:form>

↓
------html 결과------
<form id="command" action="현재 요청 URI" method="post">

- id 속성(기본값) : command

- action 속성(기본값) : 자기 페이지의 URL (ex. /test/boardForm.do)

- method 속성(기본값) : POST

commandNamemodelAttribute 옵션

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

 

vo 객체 (model 혹은 빈즈)

스프링 form 태그를 사용한 부분이랑 매핑 시키기 위해서 사용한다.

 

vo에 title 이란 변수가 있으면

스프링 form tag를 사용한 것 중에 title 이란 name이 있을 경우에 알아서 setter를 탄다.

수정 시 또한 알아서 getter를 탄다.

commandName → SpringFramework 버전 4 가능, 버전 5는 오류!

commandName 대신에 modelAttribute 옵션을 사용(SpringFramework 버전 5)

1. form 태그(commandName)
<form:form commandName="boardVO"></form:form>

2. form 태그(modelAttribute)
<form:form modelAttribute="boardVO"></form:form>

↓
------html 결과------
<form id="boardVO" action="/test/boardForm.do" method="post"></form>

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

- id / name 속성 : 별도로 지정하지 않으면 commandName과 같은 값

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

결과 HTML:
<form id="boardForm" name="boardForm" action="/test/boardForm.do" method="post"></form>
 

▶ 컨트롤러 부분

- @RequestMapping 어노테이션을 사용

method 를 GET, POST 로 나눠서 action 처리

- 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에서 사용될 명칭이 된다.

- @ModelAttribute("boardVO") 처럼 이름을 지정하면 변수명(vo) 과 다른 이름을 사용가능하다.

@RequestMapping(value = "/boardForm.do", method = RequestMethod.GET)
public String boardForm(@ModelAttribute("boardVO") BoardVO vo, Model model) throws Exception {
    vo.setTitle("제목 입니다.");
    return "boardForm";
}
 

▶ action에 <c:url> 태그 대신 사용법

※ 컨텍스트 패스를 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>

 

▶ 파일 업로드

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

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

▶ 디자인

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

<style>
.formStyle { margin:0; padding:0; }
</style>

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

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

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


https://m.blog.naver.com/jjhstr/60102113401

 

[spring] form:form commandName=""??

<form:form commandName="Name" name="Name"> commandName은요. vo객체를 말하는 거에요. vo라고...

blog.naver.com

https://tinkerbellbass.tistory.com/43

 

Spring MVC 에서 제공하는 폼 태그

참고도서 초보 웹 개발자를 위한 스프링4 프로그래밍 입문 국내도서 저자 : 최범균 출판 : 가메출판사 2015.03.02 상세보기 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3..

tinkerbellbass.tistory.com

 

728x90

댓글