grails - 编译的 GSP 页面是否与上下文路径相关联?

标签 grails grails-2.0 gsp

我正在开发一个 Grails 2.4.2 应用程序,并且相同的代码库用于各种客户。每个客户都使用他们自己的图标、文本字符串等自定义了基于 GSP 的 Web UI。我已确保使用 Config.groovy 中定义的 Groovy 变量在 GSP 页面中完成自定义。 IE。像这样的东西:

customerName = ''
favicon = ''

if (appName == 'foo') {
  customerName = 'Foo'
  favicon = "favicon_${appName}.ico"
}

然后从 GSP 页面中引用这些变量。这工作正常。问题是应用程序需要为每个客户单独的 war 文件。所以CI服务器为客户A构建一个war,然后运行grails clean,修改application.properties文件中的app名称等,为客户B构建war等。每个war文件构建大约需要4.5m,乘以10个客户构建。所以我认为更好的方法是构建一次war文件,然后让CI服务器复制它N次,并在每个war文件中使用客户名称、servlet上下文路径等修改application.properties文件.有人向我指出,GSP 页面是在 war 文件构建期间编译的,并且它们最终以上下文路径作为类名的一部分。这对我来说似乎有点奇怪。 IE。假设我有客户“Foo”,我决定构建一个名为 foo.war 的 war 文件,该文件将部署在 servlet 上下文路径/foo 中。页面“bar.gsp”的编译结果将是这样的:
WEB-INF/classes/gsp_foo_bar.class
WEB-INF/classes/gsp_foo_bar_gsp_html.data
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data

我尝试为客户 A 获取已经编译的 war 文件,更改应用程序名称和上下文,并将其重新部署为客户 B。它工作正常,我看到客户 B 的图标等。所以,我猜这个问题的摘要归结为 _foo_ 部分是否将页面与上下文路径/foo 相关联,或者它是否只是一个装饰性的东西?我当然不希望在运行时延迟编译或重新编译对性能造成影响。并且因为在这种情况下 GSP 页面的内容基本上是静态的并且不会改变,它似乎不必与上下文或应用程序名称相关联。有谁知道这是否只是一个命名的事情,或者我是否会因为在更改应用程序名称/上下文时不重新编译 war 而遇到问题?也许有更好的方法来完成我想要的?谢谢。

最佳答案

使用外部配置并在布局/模板中动态设置 favicon 怎么样?

Grails external configuration file

关于grails - 编译的 GSP 页面是否与上下文路径相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519656/

相关文章:

grails - [ chalice 3] : Replacement of doWithWebDescriptor on Plugin descriptor?

grails - grails 2.0-使用fieldValue的formatDate,这是Grails 2.0中的错误吗?

spring - StaleObjectStateException : Row was updated or deleted by another transaction?

grails - 如何在grails Controller 中重置参数?

java - Grails 如何进行多个搜索查询

Grails 与 Comet 工作示例

grails - HTTPBuilder 在 Javascript 执行后获取

unit-testing - Grails:单元测试中的NPE

ajax - 如何使用Grails的update属性SubmitToRemote

javascript - 在同一页面加载的 javaScript 文件中使用 gsp 布局声明变量