머스테치에 회원수정 정보를 뿌리기 위해서 회원아이디의 키값으로 회원을 조회해 온다.
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값으로 (유저의 키값) 유저 정보를 모두 찾은 후