09. 회원정보 수정하기
by 볼빵빵오춘기회원정보를 수정하기 위해 수정버튼을 눌렀다 그렇다면 수정할 수 있는 페이지에서는 1. 일단 수정할려는 회원의 정보를 가져와야하고, 2. 그 후 가져온 정보를 수정하면된다.
index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h2>Hello Spring boot!!</h2> <a th:if="!${session.loginEmail}" href="/member/save">회원가입</a> <a th:if="!${session.loginEmail}" href="/member/login">로그인</a> <a th:if="!${session.loginEmail}" href="/member/">회원목록</a> <br> <!-- 로그인 한 경우 보여질 화면--> session 값 확인 : <span th:if="${session.loginEmail}" th:text="${session.loginEmail}"></span><br> <a th:if="${session.loginEmail}" href="/member/update">내 정보 수정하기</a> <a th:if="${session.loginEmail}" href="/member/logout">로그아웃</a> </body> </html>
MemberController
- session을 통해 내 정보 확인해야한다.
- session에서 .getAttribute()를 통해 email을 가져온다.
그리고 getAttribute()를 통해 가져온 데이타를 그냥 String 변수에 담을려고 하면 에러가 날 것이다. why? getAttribute를 통해 가져온 데이터는 Objtect이기 때문이다. 따라서 String으로 캐스팅을 한다. - 다시 View쪽에 보내줘야하기때문에 Model에 담아준다.
@GetMapping("/member/update") public String updateForm(HttpSession session, Model model){ String myEmail = (String)session.getAttribute("loginEmail"); MemberDTO memberDTO= memberService.updateForm(myEmail); model.addAttribute("updateMember",memberDTO); return "update"; }
MemberService
public MemberDTO updateForm(String myEmail) { Optional<MemberEntity> optionalMemberEntity = memberRepository.findByMemberEmail(myEmail); if(optionalMemberEntity.isPresent()){ return MemberDTO.toMemberDTO(optionalMemberEntity.get()); }else{ return null; } }
update.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>update</title> </head> <body> <form action="/member/update" method="post"> <input type="hidden" th:value="${updateMember.id}" name="id"><br> 이메일: <input type="text" th:value="${updateMember.memberEmail}" name="memberEmail" readonly> <br> 비밀번호: <input type="text" th:value="${updateMember.memberPassword}" name="memberPassword"> <br> 이름: <input type="text" th:value="${updateMember.memberName}" name="memberName"> <br> <input type="submit" value="정보수정"> </form> </body> </html>
MemberController
수정이 완료되면 상세페이지로 다시 넘어가고자 한다.
그러면 detail로 가면되겠지 라고 생각할 수 있는데 그렇게 되면 thymeleaf로 데이터 돌린 곳은 아무것도 없는 빈 공백으로 보일 것이다.
따라서 return에 redirect를 이용하여 다시 요청한다.
@PostMapping("/member/update") public String update(@ModelAttribute MemberDTO memberDTO){ memberService.update(memberDTO); return "redirect:/member/"+memberDTO.getId(); }
MemberService
save()는 회원가입시에도 사용했었다. 그런데 왜 save()인가?
save()는 PK가 없으면 DB insert 쿼리 수행하고 있으면 update 쿼리를 수행한다.
public void update(MemberDTO memberDTO) { memberRepository.save(MemberEntity.toUpdateMemberEntity(memberDTO)); }
MemberEntity
public static MemberEntity toUpdateMemberEntity(MemberDTO memberDTO) { MemberEntity memberEntity = new MemberEntity(); // toMemberDTO에서 이 부분이 추가되었음 memberEntity.setId(memberDTO.getId()); memberEntity.setMemberEmail(memberDTO.getMemberEmail()); memberEntity.setMemberPassword(memberDTO.getMemberPassword()); memberEntity.setMemberName(memberDTO.getMemberName()); return memberEntity; }

블로그의 정보
Hello 춘기's world
볼빵빵오춘기활동하기
Hello 춘기's world볼빵빵오춘기 님의 블로그입니다.