728x90

회원 정보 수정 처리를 하자.

우선 user의 update.jsp를 form태그를 이용해서 모두 수정해준다.

	<form:form action="${root }user/update_pro" method="post" modelAttribute="updateUserBean">
		<form:hidden path="nicknameExist"/>
		<div class="form-group">
			<form:label path="user_name">이름</form:label>
			<form:input path="user_name" class="form-control" readonly="true"/>
		</div>
		<div class="form-group">
			<form:label path="user_id">아이디</form:label>
			<form:input path="user_id" class="form-control" readonly="true"/>
		</div>
		<div class="form-group">
			<form:label path="user_email">이메일</form:label>
			<form:input path="user_email" class="form-control"/>
			<form:errors path="user_email" style="color:red"/>                            	
		</div>
		<div class="form-group">
			<form:label path="user_nickname">닉네임</form:label>
			<div class="input-group">
				<form:input path="user_nickname" class="form-control" onkeypress="resetNicknameExist()"/>
				<div class="input-group-append">
					<button type="button" class="btn btn-dark" onclick="checkNicknameExist()">중복확인</button>
				</div>
			</div>
            <form:errors path="user_nickname" style="color:red"/>                                
		</div>
		<div class="form-group">
			<form:label path="user_pw">비밀번호</form:label>
			<form:password path="user_pw" class="form-control"/>
			<form:errors path="user_pw" style="color:red"/>
		</div>
		<div class="form-group">
			<form:label path="user_pw2">비밀번호확인</form:label>
			<form:password path="user_pw2" class="form-control"/>
			<form:errors path="user_pw2" style="color:red"/>
		</div>
		<div class="form-group">
			<div class="text-right">
				<form:button class="btn btn-primary">정보수정</form:button>
			</div>
		</div>
	</form:form>

이름, 아이디, 닉네임, 이메일, 비밀번호에서 이름과 아이디는 변경 불가능하게 하겠다. 

이름과 아이디의 태그에서 readonly가 아닌 disabled를 사용하면 user/update_pro로 갈 때 updateUserBean에 user_id와 user_name이 주입되지 않는다. 따라서 readonly를 사용하자.

 

user_id와 user_name을 표시하기 위해 loginUserBean의 정보를 통해 이름과 아이디를 updateUserBean으로 넣어서 가져온다. mapper에서 값을 가져오자. loginUserBean의 idx를 통해 name과 id를 가져오는 select문을 실행하고 dao, service를 통해 전달한다.

	@Select("select user_name, user_id " + 
			"from user_table " + 
			"where user_idx=#{user_idx}")
	UserBean getUpdateUser(int user_idx);

아래는 userService 코드이다.

	public void getUpdateUserBean(UserBean updateUserBean) {
		UserBean tmpUpdateUserBean = userDao.getUpdateUser(loginUserBean.getUser_idx());
		updateUserBean.setUser_id(tmpUpdateUserBean.getUser_id());
		updateUserBean.setUser_name(tmpUpdateUserBean.getUser_name());
		updateUserBean.setUser_idx(tmpUpdateUserBean.getUser_idx());
	}

Controller에서 이 함수를 호출해 ModelAttribute를 통해 jsp로 전달한다.

	@GetMapping("user/update")
	public String update(@ModelAttribute("updateUserBean") UserBean updateUserBean) {
		userService.getUpdateUserBean(updateUserBean);
		return "user/update";
	}

 

이제 수정 값에 대한 유효성 검사를 하자.

비밀번호, 닉네임, 이메일에대한 유효성 검사를 error_message.properties에 작성한다.

가운데 Bean 이름이 updateUserBean으로 변경됨을 유의하자.

Size.updateUserBean.user_pw = 비밀번호는 4 ~ 20글자여야 합니다.
Size.updateUserBean.user_pw2 = 비밀번호 확인은 4 ~ 20글자여야 합니다.
Pattern.updateUserBean.user_pw = 비밀번호는 영어, 숫자만 허용합니다.
Pattern.updateUserBean.user_pw2 = 비밀번호는 영어, 숫자만 허용합니다.
NotEquals.updateUserBean.user_pw = 비밀번호가 일치하지 않습니다.
NotEquals.updateUserBean.user_pw2 = 비밀번호가 일치하지 않습니다.
Size.updateUserBean.user_nickname = 사용자 닉네임은 2 ~ 5글자여야 합니다.
Size.updateUserBean.user_email = 사용자 이메일은 6 ~ 30글자여야 합니다.
Pattern.updateUserBean.user_nickname = 닉네임은 한글, 영어, 숫자만 허용합니다.
Pattern.updateUserBean.user_email = 이메일 양식을 준수하여 주십시오.
NicknameExist.updateUserBean.user_nickname = 닉네임 중복 확인을 해주세요.

validator도 수정해준다.

		if (beanName.equals("signInUserBean") || beanName.equals("updateUserBean")) {
			if (userBean.getUser_pw().contentEquals(userBean.getUser_pw2()) == false) {
				errors.rejectValue("user_pw", "NotEquals");
				errors.rejectValue("user_pw2", "NotEquals");
			}

			if (userBean.isNicknameExist() == false) {
				errors.rejectValue("user_nickname", "NicknameExist");
			}
		}
		
		if(beanName.equals("signInUserBean")) {
			if (userBean.isUserIdExist() == false) {
				errors.rejectValue("user_id", "UserIdExist");
			}
		}

id 중복체크는 회원가입시에만 적용되므로 위와같이 수정한다.

 

모든 정보를 오류없이 입력한다면 db에 입력 정보를 반영해야 한다.

다시 mapper로가서 update문을 작성하자.

	@Update("update user_table " +
			"set user_pw = #{user_pw}, user_email = #{user_email}, " + 
			"user_nickname = #{user_nickname} " +
			"where user_idx = #{user_idx}")
	void updateUserInfo(UserBean updateUserBean);

 

dao와 service를 작성한다.

	public void updateUserInfo(UserBean updateUserBean) {
		updateUserBean.setUser_idx(loginUserBean.getUser_idx());
		
		userDao.updateUserInfo(updateUserBean);
	}

service는 위와같이 loginUserBean의 idx를 이용해 updateUserBean에 반영하고 dao를 통해 호출한다.

Controller도 살펴보자.

	@PostMapping("user/update_pro")
	public String update_pro(@Valid @ModelAttribute("updateUserBean") UserBean updateUserBean, BindingResult result) {
		if(result.hasErrors()) {
			return "user/update";
		}
		userService.updateUserInfo(updateUserBean);
		
		return "user/update_success";
	}

update가 성공했을 때 페이지까지 구성하면 완료된다.

아래는 update_success.jsp 코드이다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var='root' value="${pageContext.request.contextPath}/"/>
<script>
	alert("회원 정보가 수정되었습니다.")
	location.href="${root}user/update"
</script>

 

728x90

+ Recent posts