- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一组 grails 2.0.4 应用程序迁移到版本 3.x。它们都与许多java应用程序一起部署在同一台服务器上。两组 java 和 grails 应用程序都使用 sitemesh 和 freemarker 模板,具有共同的外观和感觉。但在 grails 3.x 中,我无法使通用装饰工作,应用程序坚持使用 layouts/main.gsp 来渲染我的 gsp。
到目前为止(grails 2.0.4)提供通用装饰是相当直接的;每个 Grails 应用程序的文件/WEB-INF/decorators.xml 提供了对适用的 freemarker 模板的引用。 web.xml 包含 sitemesh 过滤器和 freemarker 装饰器 servlet 声明和映射
装饰器.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>
我尝试过的:
资源.groovy:
beans = {
sitemeshFreemarkerServlet(ServletRegistrationBean) {
servlet = bean(FreemarkerDecoratorServlet)
urlMappings = ["*.ftl"]
loadOnStartup = 2
}
}
但是,grails 3.x 应用程序坚持使用layouts/main.gsp 来呈现我的gsp 页面。看来decorators.xml 没有被处理。我错过了什么?
最佳答案
也许这是一个丑陋的黑客,但你可以将你的 sitemesh 处理叠加到 grails 上:
@Bean
FilterRegistrationBean sitemeshFilterRegistrationBean() {
FilterRegistrationBean reg=new FilterRegistrationBean()
reg.setFilter(new MySitemeshFilter());
reg.setInitParameters(["configFile":"WEB-INF/my.sitemesh.xml"])
reg.setUrlPatterns(["/*"])
reg.setDispatcherTypes(DispatcherType.REQUEST,DispatcherType.ERROR);
reg.setOrder(0);
return reg;
}
@Bean
ServletRegistrationBean freeMarkerServletRegistrationBean(){
ServletRegistrationBean reg=new ServletRegistrationBean(new
FreemarkerDecoratorServlet(),"*.ftl");
reg.addInitParameter("TemplatePath", "class://");
reg.addInitParameter("default_encoding", "UTF-8");
// etc
return reg;
}
import com.opensymphony.module.sitemesh.Config;
import com.opensymphony.module.sitemesh.Factory
import com.opensymphony.module.sitemesh.factory.DefaultFactory;
import com.opensymphony.sitemesh.ContentProcessor;
import com.opensymphony.sitemesh.DecoratorSelector;
import com.opensymphony.sitemesh.compatability.DecoratorMapper2DecoratorSelector;
import com.opensymphony.sitemesh.webapp.SiteMeshWebAppContext;
import grails.util.Holders;
import javax.servlet.FilterConfig
class MySitemeshFilter extends com.opensymphony.sitemesh.webapp.SiteMeshFilter {
private static final String MY_SITEMESH_FACTORY = "my.sitemesh.factory";
private FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) {
super.init(filterConfig);
filterConfig.getServletContext().setAttribute("grailsApplication", Holders.grailsApplication);
this.filterConfig=filterConfig;
}
protected Factory getFactory(FilterConfig filterConfig) {
Config config=new Config(filterConfig)
Factory f=(Factory)config.getServletContext().getAttribute(MY_SITEMESH_FACTORY);
if (f==null) {
f=new DefaultFactory(config);
config.getServletContext().setAttribute(MY_SITEMESH_FACTORY, f);
}
return f;
}
@Override
protected DecoratorSelector initDecoratorSelector(SiteMeshWebAppContext webAppContext) {
Factory factory = getFactory(filterConfig);
factory.refresh();
return new DecoratorMapper2DecoratorSelector(factory.getDecoratorMapper());
}
}
contentProcessor.handles(webAppContext)
中使用新的 contentProcessor关于grails - 在 Grails 3 中使用 Sitemesh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157053/
在 sitemesh 站点中获取源代码的下载链接无效。有人有替代站点吗? 最佳答案 最新版本是2.4.2 github.com/sitemesh/sitemesh2 关于sitemesh - 在哪里可
我在Spring中使用的是SiteMesh 2.4.2版本 opensymphony sitemesh 2.4.2 我用名称 myApp.w
我想从装饰中排除一组页面(使用 sitemesh 2 和 spring-mvc 3.1)。这是我的decorators.xml: /WEB-INF/view/data/ta
我试图说服 SiteMesh 装饰器更改响应的内容类型,但我并不高兴。内容类型最终总是与装饰的 JSP 相同,而不是装饰器的类型。 例如,假设我有一个带有 header 的 JSP 我还有一个 Si
我有一个页面: 以及带有主体的站点网格布局: 有没有办法让正文的属性出现在最后一页上? 那就是最终的 body 标签看起来像: 最佳答案 尝试像这样设置布局主体标签: >
我正在努力在遗留应用程序中实现 Spring Session。我按照 Spring 文档来实现 session 库,一切似乎都运行良好,除了...... 有一个 UI 元素通过 sitemesh 装饰
我开始使用 Spring MVC 和 sitemesh 作为装饰器的项目,现在规范已更改,他们希望将后端移出前端,并且 我更愿意将其 GUI 拆分为静态 Web,该静态 Web 将调用其他后端 API
我一直在我的项目中使用 Sitemesh 3,到目前为止它运行良好。最近我遇到了一个被困住的情况。 我的最终 View 必须由 2 个 html 文件组成,两个文件都有自己的 和 标签。文件1:
我们有一个系统,它对不同大小的页面使用多个装饰器,同时使用相同的内容页面。我正在尝试设置一个可以传递给内容页面(用 JSP 编写)的变量。例如 此方法不起作用,因为内容页面被发送到装饰器,因此需要首
我曾尝试建立一个简单的 sitemesh 装饰页面,但现在遇到了困难。 首先,我的设置: #decorators.xml * 这里没什么特别的 #web.xm
是否有任何形式可以为 sitemesh 启用日志?我已经将其放入 log4j 配置中,但它不起作用
我已经尝试了我能找到的所有示例,但无法让 struts2 + sitemesh + freemarker 在简单的 jsp 上工作。 我有一个非常简单的 web.xml,一个仅转到 index.jsp
我们最近升级了我们的一个项目。这还涉及 JAR 的新版本。 Sitemesh 就是其中之一。我们从 2.2.1 更新到 2.4.2。 一切停止工作。 我们有一个自定义过滤器扩展了 Sitemesh 的
我有咨询Sitemesh does not decorate returned views ,但这篇文章对我不起作用。 我希望sitemesh只装饰.jsp页,但是当 Controller 返回一个
现在我使用struts、sitemesh、velocity,配置已经可以使用了 在主页中: #parse("common/taglibs.vm") #parse("/ve
我正在运行用 sitemesh 装饰的简单 JSP 页面(在 Spring 3.1 Web 应用程序中),但没有显式包含 sitemesh-decorator.tld 和 sitemesh-page.
我的问候! 问题很短:有没有办法在运行时更 retrofit 饰器?例如,我有一个带有一些“装饰器样式”的下拉菜单,因此当用户选择不同的样式时,它会更 retrofit 饰器。 如果您有关于此主题的任
我对 Struts 2 和 Sitemesh 还很陌生。我是一名前端开发人员,需要更改很多 CSS 和 JS 文件。我想要的是一种方法,在这种方法中,我不必为我在 JS 和 CSS 文件中更改的每个字
我正在尝试在网络系统上应用装饰器,第一步我尝试仅将它应用于一个页面。以下是我的配置 web.xml sitemesh com.opensymphony.module.sitemesh
我想在site-mesh的装饰器文件中使用spring security标签库的几个标签。然而,这些标签内的内容永远不会显示。谁能告诉我这是为什么? 代码: ">
我是一名优秀的程序员,十分优秀!