Grails如何在没有资源插件的情况下处理静态文件?

时间:2013-08-20 09:07:55

标签: javascript css grails

我正在实现Grails插件并且遇到很大问题,因为Grails会在重新加载静态资源之前触发onChange事件。所以有时它会返回过时的css / js版本。

请解释一下Grails如何重新加载静态资源(css / js)(当我使用run-app运行应用程序时)?重新加载静态资源后是否可以触发onChange事件?

2 个答案:

答案 0 :(得分:0)

如果您使用的是资源插件,则可以查看his source code。我认为他会安排更改,如果再次更改文件,可能会取消更改。

def onChange = { event ->
        if (event.source instanceof FileSystemResource) {
            if (isResourceWeShouldProcess(event.source.file)) {
                log.info("Scheduling reload of resource files due to change of file $event.source.file")
                triggerReload {
                    event.application.mainContext.grailsResourceProcessor.reloadChangedFiles()
                }
            }
        } else if (handleChange(application, event, getResourceMapperArtefactHandler().TYPE, log)) {
            log.info("Scheduling reload of mappers due to change of $event.source.name")
            triggerReload {
                event.application.mainContext.grailsResourceProcessor.reloadMappers()
            }
        } else if (handleChange(application, event, getResourcesArtefactHandler().TYPE, log)) {
            log.info("Scheduling reload of modules due to change of $event.source.name")
            triggerReload {
                event.application.mainContext.grailsResourceProcessor.reloadModules()
            }
        }
    }

答案 1 :(得分:0)

好的......我花了4-5个小时来调试它。 Grails使用Tomcat处理静态资源 - 检查org.apache.catalina.servlets.DefaultServlet.serveResource方法。 Tomcat缓存静态资源5秒钟。因此可能存在Grails触发插件文件已更改但Tomcat将在GET请求上返回缓存值的情况。我创建了票证ticket并更精确地描述了