java-school logo

내 정보 수정에서 빈 검증

컨트롤러의 요청 핸들러에 빈 검증 로직을 추가한다. 요청 핸들러의 매개 변수 리스트에서 @Valid User user 다음은 곧이어 BindingResult bindingResult를 선언해야 한다.

UsersController.java
RequestMapping(value="/editAccount",method=RequestMethod.POST)
public String editAccount(@Valid User user, BindingResult bindingResult, Principal principal) {
	//검증 로직    
	if (bindingResult.hasErrors()) {
		return "users/editAccount";
	}
	
	user.setEmail(principal.getName());
	
	int check = userService.editAccount(user);
	
	if (check != 1) {
		throw new RuntimeException(WebContants.EDIT_ACCOUNT_FAIL);
	}
	
	return "redirect:/users/changePasswd";
}

JSP 파일을 아래를 참조해 수정한다. <sf:errors> 태그는 사용자에게 검증 에러를 표시하는 스프링 폼 태그이다.

editAccount.jsp
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>

<sf:form id="editAccountForm" action="editAccount" method="post" 
        commandName="user" onsubmit="return check();">
    <sf:hidden path="email" value="abc@def.ghi" />
    <sf:errors path="*" cssClass="error" />
<table>
<tr>
    <td>이름(Full Name)</td>
    <td>
        <sf:input path="name" value="${user.name }" /><br />
        <sf:errors path="name" cssClass="error" />
    </td>
</tr>
<tr>
    <td>손전화(Mobile)</td>
    <td>
        <sf:input path="mobile" value="${user.mobile }" /><br />
        <sf:errors path="mobile" cssClass="error" />
    </td>
</tr>
<tr>
    <td>현재 비밀번호(Password)</td>
    <td>
        <sf:password path="passwd" /><br />
        <sf:errors path="passwd" cssClass="error" />
    </td>
</tr>
<tr>
    <td colspan="2"><input type="submit" value="전송" /></td>
</tr>
</table>
</sf:form>

테스트 화면

로그인 후, 내 정보 수정 화면에서 기존 정보 값을 모두 지우고 전송한다.
내 정보 수정 페이지 방문 후 모든 데이터를 지운다.
검증 실패 후 다시 내 정보 수정 페이지

참고