Handling Form Submission
Spring guide (스프링 가이드 실습) https://spring.io/guides/gs/handling-form-submission/
▶ 학습목표
1. model.addAttribute 에 멤버변수 클랙스를 이용하여 값을 주고 받을 수 있다.
2. @ModelAttribute 어노테이션을 통해 Form 값의 파라메타를 받을 수 있다.
▶ Dependency - build.gradle
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.guides'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
▶ 자바코드
1. Controller
2. 멤버변수를 갖는 클래스
package com.guides.spring;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greetingForm(Model model) {
/* Greeting 클래스를 속성값으로 전달하여 해당 클래스의 멤버변수를
templates 에서 사용할 수 있도록 한다.
주의. 매핑은 set , get 뒤의 이름의 소문자로 주고 받는다.
해당 멤버변수에 직접 매핑하지 않는다는 의미
*/
model.addAttribute("greeting", new Greeting());
System.out.println("greeting1");
return "greeting";
}
@PostMapping("/greeting")
public String greetingSubmit( @ModelAttribute Greeting greeting, Model model) {
/* @ModelAttribute 어노테이션을 통해 넘어오는 파라메터를
Greeting 클래스에서 매핑하여 받도록 한다.
주의. 매핑은 set , get 뒤의 이름의 소문자로 주고 받는다.
해당 멤버변수에 직접 매핑하지 않는다는 의미
*/
System.out.println("greeting2");
model.addAttribute("greeting", greeting);
return "result";
}
}
package com.guides.spring;
public class Greeting {
private long id=2020;
private String content="hi-jar";
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
▶ templates (Thymeleaf)
1. greeting.html
2. result.html
greeting.html
<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>
<form action="#" th:action="@{/greeting}" th:object="${greeting}" method="post">
<p>Id: <input type="text" th:field="*{id}" /></p>
<p>Message: <input type="text" th:field="*{content}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
result.html
<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'id: ' + ${greeting.id}" />
<p th:text="'content: ' + ${greeting.content}" />
<a href="/greeting">Submit another message</a>
</body>
</html>
▶ 실행화면