티스토리 뷰

Freemarker를 Tiles와 같이 써야하는 상황이 생겼다. 그래서 Tiles + Jsp 하던것처럼 tiles-layout.xml (tiles 구성 파일)을 설정을 했더니 정상적으로 동작하지 않는다. 다음과 같은 오류가 발생하였다. 

[14:34:13.723][ERROR][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet].log:line175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Could not resolve view with name 'freemarker.hello' in servlet with name 'dispatcherServlet'] with root cause
javax.servlet.ServletException: Could not resolve view with name 'freemarker.hello' in servlet with name 'dispatcherServlet'
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1377)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1142)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)

dispatcherServlet이 정의한 tiles definition을 찾아가지 못하는 문제였다. tiles definition은 다음과 같다. 

<definition name="freemarker.*" extends="main" templateType="freemarker">
    <put-attribute name="contents" value="/templates/freemarker/{1}.ftl" />
</definition>

Controller에서 예를들면 freemarker.hello 라는 리턴값을 주면 위에서 정의한 freemarker.* 으로 매핑이 되어져서 /templates/freemarker/hello.ftl 을 호출해야 하는데 위와 같이 freemarker.hello 라는 definition을 못찾고 있다. 

다른게 문제가 아니라 바로 * (wildcard) 인식의 문제였다. 필자가 알기로는 tiles 2.x 에서는 wildcard를 사용하기 위해 prefix로 WILDCARD: 를 붙여줘야 하는걸 알고 있었고 3.x를 사용하고 있는 지금은 전혀 이런 표현식을 사용하지 않아도 wildcard 처리가 되었었는데 FreeMarker와 붙여서 쓰니 제대로 인식이 되지 않았다. 왜 3.x에서 이걸 붙여야 인식이 되는지 정확하게 파악은 못했지만 어쨌든 WILDCARD: 를 prefix로 쓰면 잘 된다. 다음과 같이 쓰면 된다. 

<definition name="WILDCARD:freemarker.*" extends="main" templateType="freemarker">
    <put-attribute name="contents" value="/templates/freemarker/{1}.ftl" />
</definition>

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31