: 스프링 MVC 프레임워크에서 Bean(자바빈 클래스..VO) Validation 기능을 이용하여 요청 파라미터 값이 바인딩된 도메인 클래스(메모리에 올라간 buyerVO객체)의 입력값 검증을 함
@RequestMapping(value="/detail", method=RequestMethod.POST)
public String detailPost(@Validated BuyerVO buyerVO,
BindingResult result)
입력값 검증 규칙
@RequestMapping(value="/insert", method=RequestMethod.POST)
public String insertPost(@Validated MemberVO memberVO,
BindingResult result, Model model) {
logger.info(memberVO.toString());
List<String> hobbyList = memberVO.getHobbyList();
for(String hobby : hobbyList) {
logger.info(hobby);
}
String[] hobbyArray = memberVO.getHobbyArray();
for(String hobby:hobbyArray) {
logger.info(hobby);
}
//성별
logger.info(memberVO.getGender());
//입력값 검증 후 BindingResult가 제공하는 메서드를 이용하여 검사 결과를 확인
//result.hasErrors : 검증 오류 발생 시
if(result.hasErrors()) {
//취미 세팅
Map<String, String> hobbyMap = new HashMap<String, String>();
hobbyMap.put("01", "야구");
hobbyMap.put("02", "BTS Music");
hobbyMap.put("03", "스파이더맨 시리즈");
model.addAttribute("hobbyMap", hobbyMap); //Model객체에 Attribute로 hobbyMap설정
//성별 세팅
Map<String, String> genderMap =
new HashMap<String, String>();
genderMap.put("Male", "남성");
genderMap.put("Female", "여성");
genderMap.put("Other", "기타");
// session.setAttribute("gender", "genderMap");
model.addAttribute("genderMap", genderMap);
//forwarding
return "member/joinForm";
}else {
//뷰의 경로 (mav.setViewName("member/result");)
//forwarding
return "member/result";
}
}
BindingResult객체인 result에서 에러가 발생했을 때 - hasErrors()로 검증
error가 있을 때는 다시 "member/joinForm"으로 돌아가고 없으면 "member/result"(결과화면)으로 전송
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<script src="https://ssl.daumcdn.net/dmaps/map_js_init/postcode.v2.js"></script>
<script type="text/javascript" src="/resources/ckeditor/ckeditor.js"></script>
<link rel="stylesheet" href="/resources/css/style.css" />
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css" />
<script type="text/javascript" src="/resources/js/jquery-ui.js"></script>
<title>회원가입</title>
<style type="text/css">
.img_wrap{
width:300px;
margin-up:50px;
}
.img_wrap img{
max-width:100%;
}
</style>
<script type="text/javascript">
//다음 우편번호 검색
function openHomeSearch(){
new daum.Postcode({
oncomplete:function(data){
// alert("data" + JSON.stringify(data));
$('[name=postno]').val(data.zonecode);
$('[name=addr]').val(data.address);
$('[name=detAddr]').val(data.buildingName);
}
}).open();
}
$(function(){
$("#birth").datepicker();
});
</script>
</head>
<body>
<!--
스프링 폼 태그 라이브러리
- 스프링 폼은 HTML 폼을 표시하기 위한 태그 라이브러리
- 스프링 폼을 이용하면 HTML 폼과 자바 객체를 쉽게 바인딩할 수 있음
path : 폼 항목에 바인딩되는 폼 객체(Controller에 있음)의 프로퍼티를 지정
-->
<script type="text/javascript">
$(function(){
$("#input_img").on("change",handleImgFileSelect);
});
//e : change 된 이벤트 정보
function handleImgFileSelect(e){
//e.target : <input type="file".. 요소
var files = e.target.files;
var filesArr = Array.prototype.slice.call(files);
filesArr.forEach(function(f){
if(!f.type.match("image.*")){
alert("확장자는 이미지 확장자만 가능합니다");
return;
}
var reader = new FileReader();
reader.onload = function(e){
$("#img").attr("src",e.target.result);
}
reader.readAsDataURL(f);
});
}
</script>
<form:form modelAttribute="memberVO" method="post" action="/member/insert"
enctype="multipart/form-data">
<p>
<div>
<div class="img_wrap">
<img id="img" />
</div>
</div>
<div>
<h5>회원이미지</h5>
<input type="file" id="input_img" name="uploadFile">
</div>
</p>
<p>
아이디 : <form:input path="memberid" />
<c:if test="${dupChkResult!=null}">
<font color="red">
${dupChkResult}
</font>
</c:if>
<font color="red">
<form:errors path="memberid"/>
</font>
</p>
<p>
이름 : <form:input path="name" />
<font color="red">
<form:errors path="name"/>
</font>
</p>
<p>
비밀번호 : <form:password path="password" />
<font color="red">
<form:errors path="password"/>
</font>
</p>
<p>
우편번호 : <form:input path="postno" />
<button type="button" class="btn btn-primary btn-icon-split btn-sm"
onclick="openHomeSearch()">
<span class="icon text-white-50">
<i class="fas fa-flag"></i>
</span>
<span class="text">우편번호검색</span>
</button>
<font color="red">
<form:errors path="postno"/>
</font>
</p>
<p>
주소 : <form:input path="addr" style="width:50%;"/>
<font color="red">
<form:errors path="addr"/>
</font>
</p>
<p>
상세주소 : <form:input path="detAddr" style="width:50%;"/>
<font color="red">
<form:errors path="detAddr"/>
</font>
</p>
<p>
이메일 : <form:input path="email" />
<font color="red">
<form:errors path="email"/>
</font>
</p>
<p>
생일 : <form:input path="birth" />
<font color="red">
<form:errors path="birth"/>
</font>
</p>
<p>
자기소개 :
<form:textarea path="introduction" rows="6" cols="30" />
</p>
<p>
취미 :
<form:checkboxes path="hobbyList" items="${hobbyMap}" />
</p>
<p>
취미(hobbyArray) :
<form:checkbox path="hobbyArray" value="안찰수" label="안찰수" /><br>
<form:checkbox path="hobbyArray" value="이죄명" label="이죄명" /><br>
<form:checkbox path="hobbyArray" value="응등이탐정" label="응등이탐정" /><br>
<form:checkbox path="hobbyArray" value="쉼상정" label="쉼상정" /><br>
</p>
<p>
성별 :
<%-- <form:radiobuttons path="gender" items="${genderMap}"/> --%>
<form:radiobutton path="gender" value="Male" label="Male" />
<form:radiobutton path="gender" value="Female" label="Female" />
<form:radiobutton path="gender" value="Other" label="Other" />
</p>
<!-- <button id="register" name="register" type="submit"
value="Submit">등록</button> -->
<form:button name="register">등록</form:button>
</form:form>
<script type="text/javascript">
CKEDITOR.replace("introduction");
</script>
</body>
</html>
error가 있을 때
<form:errors> 속성으로 Validation에 위배된 오류 메시지를 나타내준다.
오류입력 결과화면 :