회원 정보 수정 처리를 하자.
우선 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>
'프로젝트 > 게시판미니프로젝트' 카테고리의 다른 글
[프로젝트] 게시판 글 목록 구현 (0) | 2020.05.12 |
---|---|
[프로젝트] 게시글 작성하기 (0) | 2020.05.11 |
[프로젝트] 상단 메뉴 처리, 및 로그아웃 (0) | 2020.05.08 |
[프로젝트] 로그인 처리 (0) | 2020.05.08 |
[프로젝트] 회원가입 - 아이디 중복 확인, 회원 가입 정보 저장 (0) | 2020.05.08 |