【问题标题】:Grails controller action executed multiple times多次执行 Grails 控制器操作
【发布时间】:2012-01-11 15:24:09
【问题描述】:

这个sn-p出现了一个奇怪的问题:

class FooController {

  def barService

  def update = {
    log.debug("I'm getting executed")
    barService.doFoo()
    render "Done"
  }
}

当我现在在浏览器中输入http://my.domain.tld/fancyapp/foo/update(我的情况是Firefox)时,update 中的代码会执行3次。


编辑 1: barService.doFoo() 包含大量计算,因此需要很长时间才能完成。


编辑 2: @hvgotcodes:不,抱歉,没有身份验证,我的 UrlMappings.groovy 看起来像这样:

class UrlMappings {
  static mappings = {
    "/$controller/$action?/$id?"{
      constraints {
        // apply constraints here
      }
    }
    "/"(view:"/index")
    "500"(view:'/error')
  }
}

@Jarred:不,只有常见的嫌疑人Bootstrap.groovyBuildConfig.groovyConfig.groovyDataSource.groovyUrlMappings.groovy

提示任何人?

【问题讨论】:

  • 发生了其他事情——您有任何 url 映射、身份验证或其他任何事情吗?
  • 你的 conf/ 目录中有过滤器吗?
  • 快速回复 - 我用答案和代码更新了问题。
  • 取出 barService.doFoo() 调用,看看它是否仍然执行 3 次。我无法想象它会做什么,但值得一试。
  • 使 doFoo() 更快 :) 如果您不需要 doFoo() 的响应,您可以生成一个线程并让它在后台运行。但我认为有一种方法可以设置请求的超时时间(这对你来说可能是一个更好的解决方案)我只是不知道该怎么做。

标签: grails groovy controller request action


【解决方案1】:

如果请求时间过长,浏览器可能会重试请求。如果您可以提高 doFoo() 方法的性能,它应该只执行一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2016-04-09
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多