게시글에 작성되는 댓글 중에서 비밀글 설정이 있는 경우, 작성자와 관리자만 해당 댓글을 확인할 수 있도록 Thymeleaf의 SpEL(Servlet Expression Language)을 활용하여 구현하고자 했다. 그러나 SpEL을 사용하여 Enum 값과 Enum 값을 비교할 때 org.thymeleaf.exceptions.TemplateInputException 오류가 발생했다.
/* Account.java */
@Entity
public class Account extends BaseTimeEntity {
// 생략
@Enumerated(EnumType.STRING)
private Role state;
}
/* Role.java */
@Getter
public enum Role {
USER, ADMIN;
}
<!-- qa.html -->
<th:block th:if="${account.state eq T(com.windsome.constant.Role).ADMIN}">
<!-- 관리자 권한을 갖고있을 경우 보여질 코드 -->
</th:block>
<th:block th:if="${account.state eq T(com.windsome.constant.Role).USER}">
<!-- 유저 권한을 갖고있을 경우 보여질 코드 -->
</th:block>
위와 같이 Enum 값과 Enum 값을 비교하면 org.thymeleaf.exceptions.TemplateInputException 오류가 발생한다. 그러나 각각을 실행해보면 오류 없이 출력되는 것을 확인할 수 있다.
<span th:text="${account.state}"></span> <!-- USER 출력 -->
<span th:text="${T(com.windsome.constant.Role).USER}"></span> <!-- USER 출력 -->
위 코드에서 오류가 발생하는 이유는 명확하지 않았지만 두 가지 해결 방안을 찾을 수 있었다.
${#strings.toString(account.state) == 'ADMIN'}
${account.state.name == T(com.windsome.constant.Role).ADMIN.name}