0

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

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

4

2 回答 2

0

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

于 2013-08-25T15:49:47.377 回答
0

如果你使用资源插件,你可以查看他的源代码。我认为他安排了更改,如果您再次更改文件,可能会取消它。

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()
            }
        }
    }
于 2013-08-20T12:19:02.823 回答