728x90
Request Parameter
request parameter로 속성을 담아서 /confirm url로 전송. 입력 부분을 Form으로 대체 가능
package com.example.demo.controller;
import com.example.demo.form.Form;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDate;
@Controller
public class RequestParamController {
@GetMapping("show")
public String showView() {
return "entry";
}
// @PostMapping("confirm")
// public String confirmView(
// Model model, @RequestParam String name, @RequestParam Integer age,
// @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam LocalDate birth
// ) {
// model.addAttribute("name", name);
// model.addAttribute("age", age);
// model.addAttribute("birth", birth);
//
// return "confirm";
// }
@PostMapping("confirm")
public String confirmView(Form f) {
return "confirm2";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>INPUT</title>
</head>
<body>
<form th:action="@{/confirm}" method="post">
<div>
<label for="name">NAME: </label>
<input type="text" name="name">
</div>
<div>
<label for="age">AGE: </label>
<input type="number" name="age" min="1" max="100">
</div>
<div>
<label for="birth">BIRTH: </label>
<input type="date" name="birth">
</div>
<input type="submit" value="SUBMIT">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>CONFIRM</title>
</head>
<body>
<ul>
<li>NAME: [[${name}]]</li>
<li>AGE: [[${age}]]</li>
<li>BIRTH: [[${birth}]]</li>
</ul>
</body>
</html>
<!-- ---------------------- -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>CONFIRM WITH TITLE</title>
</head>
<body>
<ul>
<li>NAME: [[${form.name}]]</li>
<li>AGE: [[${form.age}]]</li>
<li>BIRTH: [[${form.birth}]]</li>
</ul>
</body>
</html>
url에 따른 페이지 반환
package com.example.PathVariableSample.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class PathVariableController {
@GetMapping("show")
public String showView() {
return "show";
}
@GetMapping("/function/{no}")
public String selectFunction(@PathVariable Integer no) {
String view = null;
switch (no) {
case 1:
view = "pathvariable/function1";
break;
case 2:
view = "pathvariable/function2";
break;
case 3:
view = "pathvariable/function3";
break;
}
return view;
}
@PostMapping(value = "send", params = "a")
public String showAView() {
return "submit/a";
}
@PostMapping(value = "send", params = "b")
public String showBView() {
return "submit/b";
}
@PostMapping(value = "send", params = "c")
public String showCView() {
return "submit/c";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>SHOW</title>
</head>
<body>
<div>
<h3><a th:href="@{/function/1}">FUNCTION 1</a></h3>
<h3><a th:href="@{/function/2}">FUNCTION 2</a></h3>
<h3><a th:href="@{/function/3}">FUNCTION 3</a></h3>
<form th:action="@{/send}" method="post">
<input type="submit" value="BUTTON A" name="a">
<input type="submit" value="BUTTON B" name="b">
<input type="submit" value="BUTTON C" name="c">
</form>
</div>
</body>
</html>
Validation
입력 내용이 요건에 만족하는지 타당성을 확인하는 입력 체크. 단일 항목 검사/상관 항목 검사로 나뉨
- 입력 체크를 위한 어노테이션: Bean Validation, Hibernate Validator 등
package com.example.demo.form;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
@Data
public class CalcForm {
@NotNull
@Range(min=1,max=10)
private Integer leftNum;
@NotNull
@Range(min=1,max=10)
private Integer rightNum;
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="#{title.entry}">INPUT</title>
</head>
<body>
<form th:action="@{/calc}" method="post" th:object="${calcForm}">
<ul th:if="${#fields.hasErrors('*')}">
<li th:each="err:${#fields.errors('*')}" th:text="${err}"></li>
</ul>
<div>
<input type="text" th:field="*{leftNum}">
+
<input type="text" th:field="*{rightNum}">
</div>
<button type="submit" th:text="#{button.send}"></button>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>CONFIRM</title>
</head>
<body>
<h2>RESULT</h2>
<h3>[[${calcForm.leftNum}]]+[[${calcForm.rightNum}]]=[[${result}]]</h3>
</body>
</html>
위의 계산 프로그램에서 어노테이션에 의한 에러메시지는 resources의 messages.properties, ValidationsMessages.properties에서 관리한다.
// messages.properties
title.entry = 입력 화면
button.send = 계산
calcForm.leftNum = 왼쪽
calcForm.rightNum = 오른쪽
//ValidationMessages.properties
javax.validation.constraints.NotNull.message={0}: 숫자를 입력해주세요
org.hibernate.validator.constraints.Range.message={0}: {min}~{max} 범위의 숫자를 입력해주세요.
typeMismatch.java.lang.Integer={0}은 정수를 입력해주세요.
자신이 원하는 제약을 만들어 커스텀 유효성 검사기를 사용할 수도 있다.
//CalcValidator.java
package com.example.demo.validator;
import com.example.demo.form.CalcForm;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
//org.springframework의 라이브러리를 import하도록 주의
@Component
public class CalcValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return CalcForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
CalcForm form = (CalcForm) target;
if (form.getLeftNum() != null && form.getRightNum() != null) {
if (!((form.getLeftNum() % 2 == 1) && (form.getRightNum() == 0))) {
errors.reject("com.example.demo.validator.CalcValidator.message");
}
}
}
}
//컨트롤러에 추가
@Autowired
CalcValidator calcValidator;
@InitBinder("calcForm")
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.addValidators(calcValidator);
}
//messages.properties
com.example.demo.validator.CalcValidator.message=왼쪽에는 홀수를, 오른쪽에는 짝수를 입력해주세요.
유효성 검사는 순서에 관계없이 무작위로 출력되는데, 이를 관리해주기 위해서 @GroupSequence 어노테이션을 사용할 수 있다.
728x90
'웹 > Spring, Django' 카테고리의 다른 글
[Spring]Service (1) | 2023.05.15 |
---|---|
[Spring]Application-CRUD (0) | 2023.05.12 |
[Spring]Thymeleaf 문법, Layout (0) | 2023.05.10 |
[Spring]JDBC/MVC Model (0) | 2023.05.09 |
[Spring]DI/AOP (0) | 2023.05.04 |
댓글