grails - 在 grails Controller 中使用没有参数 () 的函数是否存在问题?

标签 grails

我在 tomcat 中托管的 grails (1.3.7) 应用程序面临一个奇怪的问题。

当应用程序持续使用时,应用程序会在某个时间点卡住​​(挂起状态)。在跟踪问题时,我发现只是在卡住具有零参数的函数之一(例如,作为 Controller 代码的一部分的 getLinceneInfo())被随机调用并且永远不会返回。 Controller 代码中有三个这样的函数,每次我将这些函数更改为使用至少一个虚拟参数调用时,这个问题就体现在没有任何参数 () 的函数上。一旦将所有 3 个函数都更改为传递参数,此问题就不会再次出现。

有人可以对这种随机行为有所了解吗?

问候,
雷诺

最佳答案

在 2.0 之前,所有 Controller 操作都是闭包。它们仍然受支持,但现在首选方法。为了发现应该被视为 Action 的闭包,您的 Controller 类被实例化并调用 getter 以确定它们的返回类型。这是因为每当您在 Groovy 类中有一个看起来像

def foo = ...

发生的情况是,Groovy 编译器将其转换为私有(private)字段,并添加了 getter 和 setter,在本例中为 Object getFoo() { ... }。和 void setFoo(Object foo) { ... } .如果您已经拥有这些方法中的一种或两种,它们将不会被覆盖。这就是属性在域类、标记库和 Controller 中的工作方式。由于闭包是用 def 定义的没有办法知道它是闭包,还是字符串,或者其他什么,所以需要调用 getter。

这里最简单的解决方法是将方法名称更改为看起来不像 getter。一种看起来仍然像 getter 的常见模式是将其更改为 licenceInfo() .

关于grails - 在 grails Controller 中使用没有参数 () 的函数是否存在问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170971/

相关文章:

grails - 如何使用 Grails 社交插件从 Facebook 获取电子邮件 ID

grails - 创建grails脚本

java - 用非常简单的术语来说,Groovy/Grails/Hibernate/JBoss/Jade 是什么?

由于重定向循环,Grails Spring Security 无法显示登录页面

hibernate - 在 Grails 中配置 Postgres

grails - Grails多个数据源,在尝试将新实例保存到所选数据源中时不起作用

grails - 从gsp访问Grails Domain类上的静态映射内容

grails - Grails中的自动构建 war 项目

hibernate - 如何配置要存储为 (postgres 9.4) jsonb 的 grails 域类属性?

Grails isDirty() 不适用于关联