지난 블로그에서 게시글 만들기와 수정, 삭제를 만들었다. 이번 블로그에서는 회원의 정보를 변경하는 페이지를 만들어본다.
1. View 확인
user/updateForm.mustache
{{> /layout/header}} <div class="container p-5"> <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 type="text" class="form-control" placeholder="Enter username" name="username" value="{{sessionUser.username}}" disabled> </div> <div class="mb-3"> <input type="password" class="form-control" placeholder="Enter password" name="password"> </div> <div class="mb-3"> <input type="email" class="form-control" placeholder="Enter email" name="email" disabled> </div> <button type="submit" class="btn btn-primary form-control">회원가입수정</button> </form> </div> </div> </div> {{> /layout/footer}}
지금은 아이디와 이메일은 두고 비밀번호만 수정할 수 있도록 만든다. 유저 네임과 이메일은 DB에서 데이터를 받아서 표시하고 비밀번호만 입력 받을 수 있도록 한다.
2. Controller
@GetMapping("/user/updateForm") public String updateForm(HttpServletRequest request) { // 세션 접근 User sessionUser = (User) session.getAttribute("sessionUser"); // 로그인 정보 확인 if (sessionUser == null) { return "redirect:/loginForm"; } // DB에서 세션id를 가지고 유저네임과 이메일을 조회 User user = userRepository.findByUsernameAndEmail(sessionUser.getId()); // 세션 정보를 View 에 넣는다. request.setAttribute("sessionUser", user); return "user/updateForm"; }
3. Repository
user/UerRepository
public User findByUsernameAndEmail(int id) { Query query = em.createNativeQuery("select username, email from user_tb where id =?",User.class); query.setParameter(1,id); try{ User user = (User) query.getSingleResult(); // getSingleResult()의 리턴값이 오브젝트라 다운캐스팅 return user ; }catch(Exception e){ return null ; }
select 쿼리를 통해 유저네임과 이메일을 조회한다. id 는 세션의 아이디를 넘겨받는다.
4. DB 데이터 View에 전달
DB에서 전달 받은 데이터를 View 에 전달한다.
{{> /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 type="text" class="form-control" placeholder="Enter username" name="username" value="{{sessionUser.username}}" disabled> </div> <div class="mb-3"> <input type="password" class="form-control" placeholder="Enter password" name="password"> </div> <div class="mb-3"> <input type="email" class="form-control" placeholder="Enter email" name="email" value="{{sessionUser.email}}" disabled> </div> <button type="submit" class="btn btn-primary form-control">회원가입수정</button> </form> </div> </div> </div> {{> /layout/footer}}
Enter username 태그와 Enter email 태그에 각각 value="{{sessionUser.username}}” , value="{{sessionUser.email}}" 를 추가해서 컨트롤러의 user데이터를 전달받는다.
아이디 ssar 로 로그인 했을 때 DB 의 유저네임과 이메일을 전달받아 페이지에 띄운다.
Share article