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;
}
'강의 따라하기 > member2' 카테고리의 다른 글
11_로그아웃 (0) | 2023.12.28 |
---|---|
10_회원 삭제하기 (0) | 2023.12.28 |
08. 회원정보 상세조회 (1) | 2023.12.28 |
07. 회원목록 출력하기 (1) | 2023.12.28 |
06. 로그인 하기 (0) | 2023.12.28 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기