마이페이지를 만들면서 동시에 수정도 가능하게 하려고 로그인한 사용자의 정보를 View에 띄워줄 수 있는 코딩을 했다.
직접 아이디 값하고 비교해서 다시 쿼리를 날려 데이터를 가져와 View에 쏴주는 사람도 있는 것 같지만 나는 일단 세션 정보에 담아둔 값을 그대로 View에 쏴주고 그 값에 수정을 한 경우에 그대로 값을 다시 Vo에 담아 가져오는 로직을 구현해봤다.
@GetMapping("updateInfo")
public String updateInfoPage(Model model) {
model.addAttribute("userVo", new UserVo());
return "myInfo/updateInfo";
먼저 페이지를 보여주는 Controller이다. input 값을 담을 Vo 객체 말고 따로 Session 값을 Model에 담을 필요는 없다. 어차피 로그인 하면서 Session에 정보가 담겨있기 때문에 View에서 가져다 사용하기만 하면 되기 때문이다.
<div>
<span>이름</span>
<input type="text" th:placeholder="${session.userDTO.userName}"
th:value="${session.userDTO.userName}" name="userName" id="userName" readonly>
</div>
class로 정의된 게 많지만 일단 깔끔하게 보기 위해 싹 지우고 핵심 코드만 올렸다.
보는 바와 같이 Controller에서 따로 Model 객체에 Session값을 담지 않아도 로그인할 때 값을 주어 가지고 있게 된다면 꺼내 사용하기만 하면 된다. 사용하는 방법은 "${session.객체.파라미터}" 이런 형태로 사용할 수 있는 것 같다.
이때, 이름 부분은 수정이 불가능하게 할거라 Session값 그대로 다시 Controller로 가져와야 한다. 때문에 th:field 태그를 사용하지 않았다. 왜냐하면 th:field를 사용하면 name, id, value를 정의하는 것과 같기 때문에 따로 value 값으로 Session 값을 넣어줘도 Controller로 Session 값을 가져오지 못 한다. 그래서 th:field 대신에 name과 id값을 따로 지정하고 value값을 따로 지정해준 것이다.
<div>
<span>연락처</span>
<input type="text" th:placeholder="${session.userDTO.userPn}"
th:field="*{userPn}" id="phoneNumber">
</div>
다른 예시로 연락처를 보면 value 값이 없는 것을 볼 수 있다. 연락처는 placeholder에 Session값을 줘서 기본 값을 보여주고 추가로 입력을 받을 수 있게 했다. 그때, 입력 받은 값이 th:field에서 정의해준 userPn에 매핑되게 된다.
이름과 연락처 둘 다의 공통점은 placeholder로 Session의 값을 보여줬다는 것인데 위에서 말한 "${session.객체.파라미터}" 이런 형태로 사용할 수 있으니 참고하면 된다. 이때, Controller에서 Model 객체에 무언가 담아서 보내 줄 필요가 없다는 것도 체크하고 있으면 좋다.
'Project > 소경관' 카테고리의 다른 글
[소경관] : 로그인 로직 오류 수정 (0) | 2022.06.04 |
---|---|
[소경관] : JPA 회원 탈퇴 구현하기 및 회원 탈퇴 Session 처리하기 (0) | 2022.06.04 |
[소경관] : 회원가입과 로그인 로직 수정하기 (0) | 2022.06.02 |
[소경관] : 등록한 차량 초기화 (0) | 2022.05.31 |
[소경관] : ocr 기능 완성과 몇 가지 문제 체크 (0) | 2022.05.30 |
댓글