스프링/4. 스프링 MVC-2

79. 컨버터를 뷰 템플릿에 적용

sdafdq 2023. 9. 23. 21:23

스프링의 컨버전 서비스에 컨버터들을 등록하여 잘 사용이 되는 것을 확인 하였다.

 

근데, 또 반대로 뷰 템플릿에 보여줄 때는 객체나 이런 것 들을 문자로써 보여줘야 한다.

 

 

물론 이게 자동으로 된다.

@Controller
public class ConverterController {
    @GetMapping("/converter-view")
    public String converterView(Model model){
        model.addAttribute("ipPort", new IpPort("127.0.0.0", 8080));
        return "converter-view";
    }
}

컨트롤러의 모델에 IpPort 객체를 담고, 그 모델을 converter-view.html로 가져가는 것이다.

 

 

<li>${ipPort}: <span th:text="${ipPort}" ></span></li>
<li>${{ipPort}}: <span th:text="${{ipPort}}" ></span></li>

태그의 자식으로써 들어가는 ${ipPort}는 당연히 그냥 그대로 텍스트로 출력되는거고,

타임리프의 기능안에 들어가 있는 ${ipPort}는 변수로써 인지되는데,

여기 보면 중괄호 하나를 쓰는 것과 두개를 쓰는 것이 있는데

중괄호 하나를 쓰는 것은 컨버터가 적용되지 않는 것이고,

중괄호 두개를 쓰는 것은 컨버터가 적용되는 것이다.

 

  • ${ipPort}: hello.typeconverter.type.IpPort@59cb0945
  • ${{ipPort}}: 127.0.0.0:8080

결과이다.

중괄호 하나 쓴 것은 컨버터가 적용되지 않아 객체 자체의 toString()이 출력되었고

컨버터가 적용 된 것은 멤버의 값이 다 문자열로 바뀌고 그게 이어져서 출력되었다.

 

 

 

 

참고로 타임리프의 기능 중 하나인

<input type="text" th:field="*{ipPort}"><br/>

th:field는 저렇게 중괄호 하나만 해도 자동으로 컨버터가 적용된다.

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

81. 포맷터 스프링(컨버전서비스)에 등록  (0) 2023.09.24
80. 포맷터  (0) 2023.09.24
78. 컨버전서비스 실제 사용  (0) 2023.09.23
77. 컨버전 서비스  (0) 2023.09.23
76. 스프링 타입컨버터  (0) 2023.09.22