我正在将一组Grails 2.0.4应用程序迁移到3.x版本。所有这些应用程序都与一些Java应用程序一起部署在同一台服务器上。使用Sitemesh和Freemarker模板,两组Java和Grails应用程序具有共同的外观和感觉。
但是,在Grails 3.x中,我无法使常见的装饰工作,该应用程序坚持使用layouts/main.gsp来渲染我的GSP。
到目前为止(Grails 2.0.4),提供共同的装饰相当简单;每个Grails应用程序的/WEB-INF/decorators.xml文件提供对适用的Freemarker模板的引用。而web.xml包括Sitemesh过滤器和Freemarker装饰器servlet声明和映射。
decorators.xml:
然而,Grails 3.x 应用程序坚持使用 layouts/main.gsp 来呈现我的 GSP 页面。看起来 decorators.xml 没有被处理。我错过了什么吗?
到目前为止(Grails 2.0.4),提供共同的装饰相当简单;每个Grails应用程序的/WEB-INF/decorators.xml文件提供对适用的Freemarker模板的引用。而web.xml包括Sitemesh过滤器和Freemarker装饰器servlet声明和映射。
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>
在web.xml中添加Sitemesh过滤器和Freemarker Servlet:
<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>
我尝试过:
- 将decorators.xml移动到src/main/webapp/WEB-INF下
- 在grails 3.x中,sitemesh过滤器不再存在,因此我已删除sitemesh.xml
- web.xml未被使用,因此现在我在spring/resources.groovy中定义了freemarker servlet:
resources.groovy:
beans = {
sitemeshFreemarkerServlet(ServletRegistrationBean) {
servlet = bean(FreemarkerDecoratorServlet)
urlMappings = ["*.ftl"]
loadOnStartup = 2
}
}
然而,Grails 3.x 应用程序坚持使用 layouts/main.gsp 来呈现我的 GSP 页面。看起来 decorators.xml 没有被处理。我错过了什么吗?