유효성 검사 후 에러메세지 출력
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href='t1'>test1</a>
</body>
</html>
controller
package kr.bit.controller;
import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1() {
return "test1";
}
//폼에 작성을 한 후 경로 매핑
@PostMapping("/test1_proc")
public String test1_proc(@Valid Data data1, BindingResult result) {
//@Valid (@ModelAttribute) Data data1...<< 생략되어있음!!
//@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
//BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
System.out.println(data1.getNum1());
System.out.println(data1.getNum2());
System.out.println(result);
return "test1";
}
}
test1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
num1 : <input type="text" name="num1"><br>
num2 : <input type="text" name="num2"><br>
<button type="submit">확인</button>
</form>
</body>
</html>
index
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href='t1'>test1</a>
</body>
</html>
test1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
num1 : <input type="text" name="num1"><br>
num2 : <input type="text" name="num2"><br>
<button type="submit">확인</button>
</form>
</body>
</html>
controller
package kr.bit.controller;
import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1() {
return "test1";
}
//폼에 작성을 한 후 경로 매핑
@PostMapping("/test1_proc")
public String test1_proc(@Valid Data data1, BindingResult result) {
//@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
//BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
System.out.println(data1.getNum1());
System.out.println(data1.getNum2());
System.out.println(result);
if(result.hasErrors()) {
for(ObjectError obj : result.getAllErrors()){
System.out.println("코드: " + obj.getCode()); // 에러코드 확인
System.out.println("이름 :" + obj.getObjectName());
System.out.println("메세지 :" + obj.getDefaultMessage());
String [] str = obj.getCodes();
for(String s:str) {
System.out.println(s);
}
if(str[0].equals("Size.data.num2")){
System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
}
else if(str[0].equals("Max.data.num1")){
System.out.println("num1값 최대100이야~ 다시쓰렴~");
}
}
return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
}
return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
}
}
test2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>
만약 잘못된 타입을 입력하거나, 입력값이 지정된 범위의 값이 아니면 에러문이 출력됨
Error 메세지 웹으로 출력
index
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href='t1'>test1</a>
</body>
</html>
controller
package kr.bit.controller;
import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1() {
return "test1";
}
//폼에 작성을 한 후 경로 매핑
@PostMapping("/test1_proc")
public String test1_proc(@Valid Data data1, BindingResult result) {
//@Valid : 메소드에 주입받는 빈에 유효성 검사를 실시하겠다라는 선언!!
//BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
System.out.println(data1.getNum1());
System.out.println(data1.getNum2());
System.out.println(result);
if(result.hasErrors()) {
for(ObjectError obj : result.getAllErrors()){
System.out.println("코드: " + obj.getCode()); // 에러코드 확인
System.out.println("이름 :" + obj.getObjectName());
System.out.println("메세지 :" + obj.getDefaultMessage());
String [] str = obj.getCodes();
for(String s:str) {
System.out.println(s);
}
if(str[0].equals("Size.data.num2")){
System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
}
else if(str[0].equals("Max.data.num1")){
System.out.println("num1값 최대100이야~ 다시쓰렴~");
}
}
return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
}
return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
}
}
Error 메세지 Properties로 지정하여 출력
index
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href='t1'>test1</a>
</body>
</html>
controller
package kr.bit.controller;
import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1(Data data) {
return "test1";
}
@PostMapping("/test1_proc")
public String test1_proc(@Valid Data data, BindingResult result) {
if(result.hasErrors()) {
return "test1"; //error 메세지 출력 -> 유효성검사에 위배되었으므로
}
return "test2"; // 입력한 값 띄움 -> 유효성검사 통과
}
}
test1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form action="test1_proc" modelAttribute="data" method="post">
num1: <form:input path="num1" type="text"/><br>
<form:errors path="num1"/><br>
num2: <form:input path="num2" type="text"/><br>
<form:errors path="num2"/><br>
<button type="submit">확인</button>
</form:form>
</body>
</html>
ServeletAppContext
package kr.bit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
public class ServletAppContext implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
res.setBasename("/WEB-INF/properties/error");
return res;
}
}
properties
Max.data.num1= Value of num1 have not to over 100
Size.data.num2= Value of num2 have to between 4 and 10
# 에러종류, 빈이름, 프로퍼티명
# 어노테이션명.클래스명(맨앞 소문자).필드명
test2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>
'Frameworks > Spring' 카테고리의 다른 글
[Spring] Type of JSR Annotations (0) | 2024.05.10 |
---|---|
[Spring] MVC (FormTag - path (Radiobutton Checkbox etc..) (1) | 2024.05.09 |
[Spring] MVC (Properties / Print the set value in JSP) (0) | 2024.05.09 |
[Spring] MVC (@SessionScope) (0) | 2024.05.09 |
[Spring] MVC (Session / @SessionAttibute) (0) | 2024.05.09 |