Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Thymeleaf에서 SpEL로 Enum 접근하기

뷰 템플릿을 작업하다보면 서버의 Enum값등을 가져와서 써야하는 경우가 많이 있다. 특정 코드값을 쓴다거나 Enum의 값을 순회하면서 값을 출력해 준다던지 하는 용도다. Thymeleaf를 처음 써보다 보니 Thymeleaf내에서 Enum을 어떻게 써야 하는지 잘 몰라서 찾아보았다.

model.addAttribute("codes", Codes.values());

물론 위처럼 뷰에서 사용할 Enum을 모델을 통해서 뷰에 전달해 줄 수 있다. 가장 간단하고 직관적(?)이고 생각해보면 크게 나쁘진 않다. 다른 템플릿 엔진도 Enum값을 쓸때는 상단에 명시해 줬어야 했으니 컨트롤러에서 명시적으로 내려준다고 해서 크게 문제가 있어 보이진 않는다.

하지만 Thymeleaf를 Spring MVC와 함께 사용하면 자동으로 SpEL(Spring Expression Language)을 사용할 수 있게 된다. 나도 잘 모르지만 좀 더 자세히 얘기하면 Thymeleaf의 SpringStandard Dialect라는게 활성화되서 SpEL을 사용할 수 있다.

이 SpEL을 사용하면 Thymeleaf에서 Enum을 바로 사용할 수 있다.

#{T(kr.ne.outsider.Codes).values()}
#{T(kr.ne.outsider.Codes).ERROR}
#{T(kr.ne.outsider.Codes).MESSAGE}

SpEL의 T 오퍼레이터를 사용해서 인스턴스(타입?)에 직접 접근할 수 있다. 위처럼 values()로 전체 Enum의 값을 가져오거나 특정 Enum의 값을 가져올 수 있다. 여기서는 보다시피 팩키지까지 모두 적어주어야 한다. java.lang 패키지는 명시하지 않아도 #{T(String)}와 같이 바로 접근할 수 있다. 이 방법으로 스태틱 상수에도 접근할 수 있다.

#{T(kr.ne.outsider$Codes).ERROR}

Enum이 static으로 정의되어 있는 경우에는 위처럼 $를 사용해야 한다.

2013/11/07 00:17 2013/11/07 00:17