정리노트

[스프링] 폼 태그

망고고래 2024. 1. 19. 13:49

Ch07. 스프링 폼 태그

7.1 개요

7.2 @ModelAttribute를 이용한 데이터 바인딩

 

 

7.1 개요

7.1.1 스프링 폼 태그

스프링 MVC와 연동되는 태그 라이브러리. 선언 필요

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

 

태그 유형 설명 출력되는 HTML 태그
<form> 폼의 시작과 끝 <form>
<input> 텍스트 입력 필드 <input type="text">
<checkbox> 체크박스 <input type="checkbox">
<checkboxes> <form:checkbox> 목록
<radiobutton> 라디오버튼 <input type="radio">
<radiobuttons> <form:radiobutton> 목록
<password> 비밀번호 <input type="password">
<select> 콤보 박스/리스트 박스 <select>
<option> <SELECT>...</SELECT>에 포함 <option>
<options> <form:option> 목록
<textarea> 입력 박스 <textarea>
<hidden> 웹 브라우저가 출력하지 않는 입력 폼 <input type="hidden">
<errors> 유효성 검사에서 생긴 오류 메시지  

 

 

7.1.2 사용법

<form> 태그는 HTML의 <form> 태그와 다르게 modelAttribute 속성을 지원하여 객체를 생성한다.

<form:form modelAttribute="member">
//member 객체 생성됨
</form:form>

 

method/action 미지정시 method=post, action=현재 요청 URL

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Tag</title>
</head>
<body>
	<h3>회원가입</h3>
	<form:form modelAttribute="member" method="POST">
		<p>아이디: <form:input path="id" name="id"/>
		<p>비밀번호: <form:password path="password"/>
		<p>거주지: <form:select path="city">
			<form:option value="서울시">서울시</form:option>
			<form:option value="경기도">경기도</form:option>
			<form:option value="인천시">인천시</form:option>
			<form:option value="충청도">충청도</form:option>
			<form:option value="전라도">전라도</form:option>
			<form:option value="경상도">경상도</form:option>
		</form:select>
		<p>성별: <form:radiobutton path="sex" value="남성"/>남성
			<form:radiobutton path="sex" value="여성"/>여성
		<p>취미: 독서<form:checkbox path="hobby" value="독서"/>
			운동<form:checkbox path="hobby" value="운동"/>
			영화<form:checkbox path="hobby" value="영화"/>
		<p><input type="submit" value="가입하기"/>
			<input type="reset" value="다시쓰기"/>
	</form:form>
</body>
</html>
package com.springmvc.chap07;

import java.util.Date;

public class Member {
	
	private int id;
	private String password;
	private String city;
	private String sex;
	private String[] hobby;
	private Date birth;
    
//getter/setter
package com.springmvc.chap07;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class Example01Controller {
	
	@GetMapping("/member")
	public String showForm(Model model) {
		Member member = new Member();
		System.out.println("@GetMapping――――――――――――――");
		System.out.println("아이디: "+member.getId());
		System.out.println("비밀번호: "+member.getPassword());
		System.out.println("거주지: "+member.getCity());
		System.out.println("성별: "+member.getSex());
		System.out.println("취미: "+member.getHobby());
		model.addAttribute("member", member);
		
		return "webpage07_01";
	}
}

@GetMapping을 통해 폼 입력 페이지(jsp)로 연결

 

 

 

7.2 @ModelAttribute를 이용한 데이터 바인딩

7.2.1 요청 처리 메서드의 매개변수에 @ModelAttribute 적용

package com.springmvc.chap07;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class Example02Controller {
	@PostMapping("/member")
    			//jsp 페이지의 <form:form modelAttribute="member">와 연결됨
	public String submitForm(@ModelAttribute Member member, Model model) {
		System.out.println("@PostMapping――――――――――――――");
		System.out.println("아이디: "+member.getId());
		System.out.println("비밀번호: "+member.getPassword());
		System.out.println("거주지: "+member.getCity());
		System.out.println("성별: "+member.getSex());
		System.out.println("취미: ");
		for(int i = 0; i < member.getHobby().length; i++)
			System.out.println("["+member.getHobby()[i]+"]");
		
		model.addAttribute("member", member);
		return "webpage07_02";
	}
}

폼 태그는 submit 버튼을 누르면 POST 방식으로 전송→@PostMapping으로 매핑

 

 

7.2.2 메서드에 @ModelAttribute 적용

메서드 수준의 @ModelAttribute: 컨트롤러 안에 @Requestmapping이 적용되지 않은 별도의 일반 메서드를 만들어 해당 메서드에 @ModelAttribute 적용

  • 뷰 페이지에서 공통으로 사용할 수 있는 커맨드 객체의 프로퍼티(멤버 변수, 필드)를 설정해서 뷰 페이지에 출력
  • 웹 요청 URL 처리 X
  • 먼저 호출되며 컨트롤러 안에 여러 개 만들 수 있음
package com.springmvc.chap07;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

@Controller
public class Example03Controller {

	@GetMapping("/exam03")
	public String showForm() {
		return "webpage07_03";
	}
	
	@ModelAttribute("title")
	public String setTitle() {
		return "@ModelAttribute 유형";
	}
	
	@ModelAttribute
	public void setsubTitle(Model model) {
		model.addAttribute("subtitle", "메서드에 @ModelAttribute 애노테이션 적용하기");
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Tag</title>
</head>
<body>
	<h2>${title}</h2>
	<h4>${subtitle}</h4>
</body>
</html>