머스테치에 회원수정 정보를 뿌리기 위해서 회원아이디의 키값으로 회원을 조회해 온다.

public User findById(int id) {
    User user = em.find(User.class, id);
    return user;
}

컨트롤러 작성

@GetMapping("/user/update-form")
public String updateForm(HttpServletRequest request) {
    User sessionUser = (User) session.getAttribute("sessionUser");
    User user = userRepository.findById(sessionUser.getId());
    request.setAttribute("user", user);
    return "user/update-form";
}

머스테치

{{> layout/header}}

<div class="container p-5">

    <!-- 요청을 하면 localhost:8080/join POST로 요청됨
    username=사용자입력값&password=사용자값&email=사용자입력값 -->

    <div class="card">
        <div class="card-header"><b>회원수정을 해주세요</b></div>
        <div class="card-body">
            <form action="/user/update" method="post" enctype="application/x-www-form-urlencoded">
                <div class="mb-3">
                    <input value="{{user.username}}" type="text" class="form-control" placeholder="Enter username" disabled>
                </div>
                <div class="mb-3">
                    <input type="password" class="form-control" placeholder="Enter password" name="password">
                </div>
                <div class="mb-3">
                    <input value="{{user.email}}" type="email" class="form-control" placeholder="Enter email" name="email">
                </div>
                <button type="submit" class="btn btn-primary form-control">회원가입수정</button>
            </form>
        </div>
    </div>
</div>

{{> layout/footer}}

패스워드는 안뿌려줌 비밀번호가 다 나오면 안된다.

또한 패스워드랑 이메일만 수정할 거니까 네임값은 패스워드랑 이메일만 남겨둿다

회원 정보 수정하기

화면에 따르면 패스워드랑 이메일만 받아서 수정해야 하니까 dto 하나 만듬

@Data
public static class UpdateDTO {
    private String password;
    private String email;
}

이후 dto에 따라 리포지토리 생성

@Transactional
public User update(int id, UserRequest.UpdateDTO requestDTO) {
    User user = findById(id);
    user.setPassword(requestDTO.getPassword());
    user.setEmail(requestDTO.getEmail());
    return user;
}

일단 id값으로 (유저의 키값) 유저 정보를 모두 찾은 후