在grails控制器中使用没有参数()的函数是否存在问题?

时间:2014-11-26 06:38:50

标签: grails

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

当应用程序连续使用时,应用程序会在某个时间点冻结​​(挂起状态)。在追踪问题的同时,我发现只是在冻结时,一个带零参数的函数(例如,getLinceneInfo()是控制器代码的一部分)被随机调用并且永远不会返回。在控制器代码中有三个这样的函数,每次我改变这些函数以至少一个伪参数调用,这个问题表现在没有任何参数()的函数上。一旦所有3个函数都被更改为传递参数,此问题就不再发生了。

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

此致 里诺

1 个答案:

答案 0 :(得分:0)

在2.0之前,所有控制器操作都是关闭的。他们仍然受到支持,但现在首选方法。要发现应被视为操作的闭包,将实例化控制器类并调用getter以确定其返回类型。这是因为每当Groovy类中的属性看起来像

def foo = ...

Groovy编译器会将其转换为私有字段,并添加getter和setter,在本例中为Object getFoo() { ... }void setFoo(Object foo) { ... }。如果你已经有这些方法中的一种或两种,它们将不会被覆盖。这是属性在域类,标记库和控制器中的工作方式。由于闭包是用def定义的,所以无法知道它是Closure,String还是其他什么,所以需要调用getter。

此处最简单的解决方法是将方法名称更改为不像getter。一个看起来像吸气剂的常见模式是将其更改为licenceInfo()

相关问题