我有一个非常标准的2.0.3 Grails应用程序,我执行了grails install-templates
,它将文件list.gsp,edit.gsp等放置在src/templates/scaffolding /目录中。这些文件在进行更改时不会自动重新加载。有没有一种方法可以让这些自动重新加载,所以我不必每次停止/启动应用程序时都会进行更改?我试着看watchedResources,但似乎是插件开发相关。自动重新加载模板文件
回答
你是正确的“监视资源”机制只适用于插件。这样做的正确的解决将是修改核心ScaffoldingGrailsPlugin.groovy
添加
def watchedResources = "file:./src/templates/scaffolding/*"
,它可能是值得提交JIRA该效果。与此同时,您可以通过编写一个简单的插件来将其“注入”脚手架插件,从而实现它的工作。不要grails create-plugin watch-scaffolding
,然后使用该插件描述如下:
import org.codehaus.groovy.grails.plugins.GrailsPlugin
class WatchScaffoldingGrailsPlugin {
def version = "0.1"
def grailsVersion = "2.0 > *"
def dependsOn = [:]
def pluginExcludes = [ "grails-app/views/error.gsp" ]
def title = "Watch Scaffolding Plugin"
def author = "Your name"
def authorEmail = ""
def description = '''\
Watches for changes to scaffolding templates and reloads dynamically-scaffolded
controllers and views.
'''
// URL to the plugin's documentation
def documentation = "http://grails.org/plugin/watch-scaffolding"
// watch for changes to scaffolding templates...
def watchedResources = "file:./src/templates/scaffolding/*"
// ... and kick the scaffolding plugin when they change
def onChange = { event ->
event.manager.getGrailsPlugin('scaffolding').notifyOfEvent(
GrailsPlugin.EVENT_ON_CHANGE, null)
}
// rest of plugin options are no-op
def onConfigChange = { event -> }
def doWithWebDescriptor = { xml -> }
def doWithSpring = { }
def doWithDynamicMethods = { ctx -> }
def doWithApplicationContext = { applicationContext -> }
def onShutdown = { event -> }
}
现在,在您的应用程序的BuildConfig.groovy
添加
grails.plugin.location.'watch-scaffolding' = '../watch-scaffolding'
(或者是你的应用程序的根,以根适当的相对路径插件),脚手架模板更改应自动重新加载。
(这是在Grails的2.1测试,我使用influences最初尝试,但它并没有任何作用,但是迫使脚手架插件的onChange
事件引发了所需的结果。)
根据GRAILS-755,这已经修复,但我不认为它有,因为他们也不会为我加载。
从那个吉拉,这里是一个可能的解决方法:
使用控制台插件,并运行此命令清除动态 脚手架视图缓存:
高清scaffoldedView = org.codehaus .groovy.grails.scaffolding.view.ScaffoldingViewResolver.scaffoldingViews.clear()
之后,下一次我请求一个页面时,它在 缓存中找不到它,因此回到d要重新创建它。
此代码刷新脚手架缓存。你可以为它创建一个特定的管理操作:
org.codehaus.groovy.grails.scaffolding.view.
ScaffoldingViewResolver.scaffoldedViews.clear()
这是一个很好的快速修复,但我正在寻找一些更自动的东西。谢谢! – 2012-08-15 18:34:31
- 1. 自动重新加载rails模块
- 2. 速度模板自动重新加载不起作用
- 3. 列表刷新/重新加载模板
- 4. jinja2从模板加载模板文件
- 5. 模板文件未加载
- 6. 加载Info.plist模板文件
- 7. 自动重新加载在文件更新
- 8. AngularJS重新加载指令模板
- 9. 错误后重新加载模板
- 10. Rails自动重新加载插件在开发模式
- 11. Freemarker:使用自定义函数重新加载模板
- 12. 如何让Emacs自动重新加载标签文件?
- 13. 如何自动重新加载更改文件
- 14. Expression Blend 4.0 - 自动重新加载编辑的文件?
- 15. 保存文件时自动重新加载浏览器?
- 16. 在Scala/Lift/SBT .11中自动重新加载文件?
- 17. emacs方案球拍自动重新加载文件
- 18. 自动重新加载Windsor容器配置文件
- 19. 如何强制SciTE自动重新加载文件?
- 20. JSF和自动重新加载xhtml文件
- 21. 重新加载自制模块
- 22. 从模板文件加载文本
- 23. 自动重新加载Tomcat webapp?
- 24. webpackDevMiddleware不会自动重新加载
- 25. Yii2页面自动重新加载
- 26. 自动重新加载div容器
- 27. Wicket:自动重新加载AjaxLazyLoadPanel
- 28. 自动加载文件到
- 29. PhpExcel加载动态模板
- 30. Django - 加载动态模板
这对于.gsp文件很好用,但由于某种原因似乎没有拿起Controller.groovy文件。有什么想法吗? – 2012-08-15 18:33:39
我看到同样的事情 - 更改'Controller.groovy'不会导致'onChange'事件。这个文档建议''watchedResources'对'.groovy'文件进行特殊处理:“如果被监视的资源指定了一个Groovy文件,那么当它被改变时,它会自动重新加载并传递到事件对象的onChange闭包中。 ,我想'因为'Controller.groovy'不是通常意义上的Groovy文件(它不会被编译和重载),它不会触发事件。 – 2012-08-15 23:38:47
更有趣的是,在改变'Controller.groovy'后更改视图模板应该会导致控制器也被重新加载(任何对视图的更改都会触发完整的重新脚手架)。但事实并非如此。在这种情况下,我怀疑脚手架控制器实际上是在重新生成,但由于重新生成的类与旧的名称相同,而Grails试图在同一个类加载器中编译它,所以类加载器将旧的'Class'对象而不是一个新的... – 2012-08-15 23:42:36