Hello

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

볼빵빵오춘기

활동하기