정리노트
[스프링] 폼 태그
망고고래
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>