I am migrating the Grails 2.0.4 application suite to version 3.x. All of them are deployed on the same server along with several java applications. Both sets of java and grails applications have a common look using sitemesh and freemarker templates. But with grails 3.x, I can’t make commond work as a decoration, the application insists on using layouts / main.gsp to render my gsp.
So far (grails 2.0.4), providing a common decoration, is pretty straightforward; the / WEB -INF / decorators.xml file of each grails application contains links to the corresponding freemarker templates. And web.xml includes a sitemesh filter and freemarker decoder and mapping servlet declarations
decorators.xml:
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/">
<excludes>
<pattern>/ND/*</pattern>
<pattern>/*/ND/*</pattern>
</excludes>
<decorator name="freemarker" page="myftl.ftl">
<pattern>/*</pattern>
</decorator>
</decorators>
Sitemesh filter and freemarker servlet from web.xml:
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>class://</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
What I tried:
- decorators.xml src/main/webapp/WEB-INF
- grails 3.x sitemesh , sitemesh.xml
- web.xml , freemarker spring/resources.groovy:
resources.groovy:
beans = {
sitemeshFreemarkerServlet(ServletRegistrationBean) {
servlet = bean(FreemarkerDecoratorServlet)
urlMappings = ["*.ftl"]
loadOnStartup = 2
}
}
grails 3.x layouts/main.gsp gsp. , decorators.xml . ?