일반적으로 유효성 검사는 프론트단에서 작업을 하는데 사실 서버랑 프론트에서 둘다 작업을 하는게 가장 좋다
그래서 서버단에서 작업을 하기위해서는 밸리데이터 클래스를 추가한다.
Student
package com.all.test01;
public class Student {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
StudentValidator
package com.all.test01;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class StudentValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Student.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
System.out.println("validate()");
Student student = (Student)target;
String studentName = student.getName();
if(studentName == null || studentName.trim().isEmpty()) {
System.out.println("studentName is null or empty");
errors.rejectValue("name", "trouble");
}
int studentId = student.getId();
if(studentId == 0) {
System.out.println("studentId is 0");
errors.rejectValue("id", "trouble");
}
}
}
createPage
<%@ 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>
createPage.jsp
<br>
<form action="student/create">
이름 : <input type="text" name="name" value="${student.name}"><br>
아이디 : <input type="text" name="id" value="${student.id}"><br>
<input type="submit" value="전송"><br>
</form>
</body>
</html>
createDonePage
<%@ 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>
createDonePage.jsp<br>
이름 : ${student.name}<br>
아이디: ${student.id}
</body>
</html>
StudentController
package com.all.test01;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class StudentController {
@RequestMapping("/studentForm")
public String studentForm() {
return "createPage";
}
@RequestMapping("/student/create")
public String studentCreate(@ModelAttribute("student") Student student,
BindingResult result) {
String page = "createDonePage";
StudentValidator studentValidator = new StudentValidator();
studentValidator.validate(student, result);
if(result.hasErrors()) {
//page = "createPage";
page = "redirect:/studentForm";
}
return page;
}
}
결과


아이디에 문자 입력시 아래와 같이 페이지 redirect 코드 때문에 다시 돌아온다.


'Spring' 카테고리의 다른 글
[스프링] 스프링 JdbcTemplate 사용하기 (0) | 2023.02.17 |
---|---|
[스프링] 스프링 MVC 게시판 (0) | 2023.02.17 |
[스프링 에러] An internal error occurred during: "Requesting Java AST from selection".com.ibm.icu.text.UTF16.isSurrogate(C)Z (1) | 2023.02.13 |
[스프링 에러] @PostConstruct @PreDestroy 에러 빨간 밑줄 (0) | 2023.02.13 |
[스프링 오류] CGLIB is required to process @Configuration classes. (0) | 2023.02.12 |