Develop

[Spring-Boot] Spring form : <form:form> 폼폼 태그 사용법 본문

웹 개발/Spring

[Spring-Boot] Spring form : <form:form> 폼폼 태그 사용법

개발 기록 2024. 3. 7. 17:59

<form:form> 폼폼 태그 사용법


 

<form:form> 태그를 사용하기 위해서는

spring-form.tld파일이 필요하고 이는 spring-webmvc-2.5.2.jar 파일에 포함되어 있다.

즉 이 폼 태그를 사용하기 위해서는 JSP 페이지에 taglib을 꼭 추가해줘야한다.

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

 

 


 

form 태그에는 데이터 바인딩을 위해 태그 안에 바인딩 path를 지정해 줄 수 있다.

이 path를 처음보면 익숙하지 않을 수 있지만 

해당 태그의 값을 담을 변수명을 써주면 된다.

(path에 해당되는 값은 도메인 모델의 Bean 객체를 의미한다.)

 

ex)

<form:form>
    아이디 : <form:input path="userId" />
</form:form>

 

이렇게 작성한다면

VO에 

private String userId;

 

라고 되어있는 것이다.

 

 


 

spring form 태그를 이용하기 위해서는 각각의 입력 path값에 매칭될 도메인 객체를 지정해 줘야 하는데

form 태그 안에 commandName 또는 modelAttribte  속성에 적어주면 된다.

 

	<form:form action="/notice/write" method="post" modelAttribute="noticeVO">
		제목 <form:input path="noTitle" placeholder="제목"/> 
		<input type="submit" value="등록하기">
	</form:form>

 

나는 modelAttribte 를 사용했으며

noticeVO 안에 noTitle이라는 변수가 들어있으므로 modelAttribte ="testVO" 라고 적어주었다

 

 

* spring tag의 <form:form>에서 . commandName과 modelAttribte 의 차이

: 스프링 버전에 따라 달라진다.
스프링 4.* 버전(표준프레임워크 3.10 버전 이하)까지는 commandName을 사용할 수 있는데
그 이상(표준프레임워크 4.0 버전 이상)에서는 modelAttribte을 사용해야 한다.

 


 

입력폼이라서 처음에 아무 데이터가 없더라도

form:form 태그를 사용한다면 객체를 생성하여 값을 넘겨줘야한다.

 

Controller

// 글쓰기 GET
@GetMapping("/write")
public String writeGET(Model model) throws Exception {
    model.addAttribute("noticeVO", new NoticeVO());
    return "/notice/write";
}

 

컨트롤러를 보면 아무값이 없음에도

   model.addAttribute("noticeVO", new NoticeVO());

 

를 통해 객체를 전달했다

 


 

빈값이 아닌 데이터를 전달한다면

ex) 데이터를 입력후 db에 저장

// 글쓰기 POST
@PostMapping("/write")
public String writePOST(@ModelAttribute("noticeVO") NoticeVO noticeVO) throws Exception {
    logger.info("글 정보 noticeVO : " + noticeVO);
    nService.write(noticeVO);
    return "redirect:/notice/main";
}

 

이렇게 매개변수 앞에 @ModelAttribute 를 붙여줘야한다.

 

 

 

다음엔 form:form 태그 + bean validation 을 이용하여 데이터를 검증하는 것을 해보겠다


 

참고한 글

 

[Spring] Spring의 form태그 라이브러리 (velog.io)

 

[Spring] Spring의 form태그 라이브러리

1) 폼 객체의 속성명을 직접 지정2) 폼 객체의 속성명은 직접 지정하지 않으면 \* 폼 객체의 클래스명의 맨 처음 문자를 소문자로 변환하여 처리3) ModelAttribute 애너테이션으로 폼 객체의 속성명을

velog.io

 

Spring 태그 <form:form> <form:select> (tistory.com)

 

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

전자정부나 스프링에서 Form을 사용할 경우 형태로 사용되는 form tag를 자주보게 된다. 오늘은 스프링에서 제공하는 tag에 대해 정리해 본다. 1. 1) spring 폼 태그를 사용하기 위해서는 spring-form.tld파

otep.tistory.com