본문 바로가기
Project/소경관

[소경관] : thymeleaf input에 Session값 가져오기와 input에 Session값을 입력 받아 Controller에 넘기기

by 오주현 2022. 6. 3.
반응형

마이페이지를 만들면서 동시에 수정도 가능하게 하려고 로그인한 사용자의 정보를 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 객체에 무언가 담아서 보내 줄 필요가 없다는 것도 체크하고 있으면 좋다.

반응형

댓글