我正在尝试从 Controller 调用 grails 服务上的方法,但看起来执行只是跳过了方法调用。
我尝试在方法中使用断点调试应用程序,但它从未被命中。
我的服务(使用 grails create-service 生成)是:
class FormatterService {
static transactional = false
def formatList (List<Host>, String fmt) {
OutputObject somePOGO = new OutputObject();
(snip)
return somePOGO
}
}
然后在我的 Controller 上我有:
class HostController {
def formatterService
def getHostsByLabels = {
(snip)
OutputObject o = formatterService.formatList(someHosts,params.format)
(snip)
}
}
当
formatterService.formatList
方法应该在 Controller 中调用,执行只是跳到下一行,没有输出打印到控制台,方法中的断点也不会被命中。 OutputObject o 引用之后为空。这里有什么问题?从我的角度来看,这可能是一个非常基本的错误,但我就是不能把我的手指放在它身上......
最佳答案
对我来说,这似乎是一场元编程灾难……
好吧,有 3 个要调试的测试:
_1)首先尝试做
println formatterService
println formatterService.getClass()
只是为了检查它注入(inject)的 bean 是否是所需的,一些插件有时会注入(inject)覆盖默认值的 bean。
_2) 确保名称为 的方法"格式列表"不会通过任何插件或核心代码的元编程注入(inject)您的服务。
测试方法很简单:只需将方法的名称更改为某个 Unrealistic One,例如:“formatListabcdewdw”,然后调用那个。如果它有效,那么它的方法会覆盖问题。
如果您更热情,可以通过以下方式查看元方法
println formatterService.metaClass.methods
_3) 只需尝试将“params.format as String”作为方法调用中的最后一个参数。\
.
希望这些有帮助,请让我知道调查结果,我很想知道.. :)
关于Grails服务 - 从 Controller 调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435287/