Я переношу набор приложений grails 2.0.4 в версию 3.x. Все они развернуты на одном сервере вместе с несколькими java-приложениями. Оба набора приложений java и grails имеют общий внешний вид с использованием шаблонов sitemesh и freemarker. Но с grails 3.x Я не могу сделать работу commond украшением, приложение настаивает на использовании layouts/main.gsp, чтобы отобразить мой gsp вместо этого.Использование Sitemesh в Grails 3
До сих пор (grails 2.0.4), обеспечивающий общее украшение, довольно прям; файл /WEB-INF/decorators.xml каждого приложения grails содержит ссылки на соответствующие шаблоны 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>
SiteMesh фильтр и FreeMarker сервлета из 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>
Что Я пробовал:
- Я переместил 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 настаивает на использовании макетов/main.gsp, чтобы сделать мои GSP страницы. Похоже, что decorators.xml не обрабатывается. Что мне не хватает?
может быть, это не самое лучшее решение, но это работает ! Большое спасибо! –