SpringBoot + Thymeleaf로 상관 확인
이 기사에서는 기간을 입력하는 페이지에서 종료일이 시작일보다 작은 경우를 확인해 봅니다.
상관 검사를 할 때 @AssertTrue 어노테이션 사용
1. 환경
Eclipse 4.7(Oxygen)
자바 8
springBootVersion = '1.5.13.BUILD-SNAPSHOT'
2. 구성
├─java
│ └─com
│ └─stone
│ └─check
│ HeloController.java
│ SampleCheckApplication.java
│ SampleForm.java
│ ServletInitializer.java
└─resources
│ application.properties
├─static
└─templates
index.html
top.html
3.form
SampleForm.java
import javax.validation.constraints.AssertTrue;
import lombok.Data;
@Data
public class SampleForm {
private int startdate;
private int enddate;
@AssertTrue(message="開始日は終了日以前を入力してください。")
public boolean isDateValid() {
if (enddate >= startdate) return true;
return false;
}
}
포인트
@AssertTrue 어노테이션을 붙여 boolean 형의 메소드를 작성합니다. 메소드의 최초는 「is」를 붙여 둡니다.
4.Controller
HeloController.java
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HeloController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(
@ModelAttribute("form") SampleForm form,
Model model){
form.setStartdate(20180401);
form.setEnddate(20180401);
return "index";
}
@RequestMapping(value = "/check", method = RequestMethod.POST)
public String check(
@ModelAttribute("form") @Valid SampleForm form,
BindingResult result, Model model) {
if (result.hasErrors()) {
model.addAttribute("errmsg", "エラーがあります。修正してください。");
return "index";
}
return "top";
}
}
첫 페이지(index.html)에서 기간을 입력하고 오류가 있는 경우 페이지에 오류를 설정하고 다시 그리며 오류가 없으면 다음 페이지(top.html)로 전환합니다.
포인트
화면이 Post 되었을 경우의 메소드의 인수의 폼 오브젝트에 「 @Valid 」 어노테이션을 붙여, BindingResult 클래스로 validation 를 바인드 합니다.
@ModelAttribute("form") @Valid SampleForm form,
BindingResult result
5.thymeleaf
(1)index.html
index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Springboot</title>
<meta charset="utf-8" />
</head>
<body>
<form th:object="${form}" th:action="@{/check}" th:method="post">
<!-- 入力に何かのエラーがあった場合のメッセージを表示する。 -->
<p th:if="${errmsg} != null" th:text="${errmsg}" style="color:red;"></p>
<label>開始日</label>
<input type="text" th:field="*{startdate}"/>
<label>終了日</label>
<input type="text" th:field="*{enddate}"/>
<!-- 期間チェックのエラーメッセージを表示する。 -->
<p th:if="${#fields.hasErrors('dateValid')}" th:errors="*{dateValid}" style="color:red;"></p>
<button type="submit">チェック</button>
</form>
</body>
</html>
포인트
전반적인 오류는 컨트롤러에 설정된 "errmsg"의 값을 표시합니다.
기간 체크 에러는, @asserttrue 의 메소드명의 is 이후의 항목명이 변수명이 되어 있습니다. (이번은, isDateValid로 했으므로 「dateValid」라고 하는 에러 변수명에 에러가 들어가 있습니다.
(2) top.html
top.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Springboot</title>
<meta charset="utf-8" />
</head>
<body>
<p>チェックOKです。</p>
</body>
</html>
실행해 보겠습니다.
종료일을 시작일보다 작게 해 보았습니다.
올바른 입력으로 해 봅시다.
상관 체크의 구현은 다른 방법도 여러 가지 있는 것 같습니다만, @assertrue 가 제일 간단하다고 생각합니다.
Reference
이 문제에 관하여(SpringBoot + Thymeleaf로 상관 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t-iguchi/items/ea3dd8691d52d7abe695텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)