私は一連の grails 2.0.4 アプリケーションをバージョン 3.x に移行しています。それらはすべて、多数の Java アプリケーションとともに同じサーバーにデプロイされます。Java と grails アプリケーションの両方のセットは、sitemesh と freemarker テンプレートを使用して共通のルック アンド フィールを持っています。しかし、grails 3.x では、commond 装飾を機能させることができません。アプリケーションは、代わりに、layouts/main.gsp を使用して gsp をレンダリングすることを要求します。
これまでのところ (grails 2.0.4)、共通の装飾を提供することはかなり単純です。各 grails アプリケーションの /WEB-INF/decorators.xml ファイルは、適用可能な freemarker テンプレートへの参照を提供します。また、web.xml には、sitemesh フィルターと freemarker デコレーター サーブレットの宣言とマッピングが含まれています。
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 サーブレット:
<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 サーブレットを定義しました。
resources.groovy:
beans = {
sitemeshFreemarkerServlet(ServletRegistrationBean) {
servlet = bean(FreemarkerDecoratorServlet)
urlMappings = ["*.ftl"]
loadOnStartup = 2
}
}
ただし、grails 3.x アプリケーションは、layouts/main.gsp を使用して gsp ページをレンダリングすることを要求します。decorators.xml が処理されていないようです。私は何が欠けていますか?