【问题标题】:Grails service - invoking method from controller?Grails服务 - 从控制器调用方法?
【发布时间】:2011-12-08 17:47:19
【问题描述】:

我正在尝试从控制器调用 grails 服务上的方法,但看起来执行只是跳过了方法调用。 我尝试在方法中使用断点调试应用程序,但它从未被命中。

我的服务(使用 grails create-service 生成)是:

class FormatterService {
    static transactional = false

    def formatList (List<Host>, String fmt) {
        OutputObject somePOGO = new OutputObject();
        (snip)
        return somePOGO
    }
}

然后在我的控制器上我有:

class HostController {
    def formatterService

    def getHostsByLabels = {
        (snip)
        OutputObject o = formatterService.formatList(someHosts,params.format)
        (snip)
    }
}

当应该在控制器中调用formatterService.formatList 方法时,执行只是跳到下一行,没有输出打印到控制台并且方法中的断点不会被命中。 OutputObject o 引用之后为空。

这里有什么问题?从我的角度来看,这可能是一个非常基本的错误,但我就是不能指手画脚......

【问题讨论】:

  • 也许 (snip)ped 部分中有一些代码导致了这种情况?您发布的内容看起来正确。

标签: grails service


【解决方案1】:

对我来说,这似乎是一场元编程灾难..

嗯,有 3 个要调试的测试:

_1) 先尝试做

    println formatterService
    println formatterService.getClass()

只是为了检查它注入的 bean 是否是所需的,一些插件有时会注入覆盖默认值的 bean。

_2) 确保名称为 "formatList" 的方法不会通过任何插件或核心代码的元编程注入到您的服务中。

测试方法很简单: 只需将方法名称更改为某个 Unrealistic One,例如:“formatListabcdewdw”,然后调用该方法即可。如果它有效,那么它的方法会覆盖问题。

如果你更热情,你可以通过

查看metaMethods
println formatterService.metaClass.methods

_3) 尝试将“params.format as String”作为方法调用的最后一个参数。\

希望这些对您有所帮助,请务必让我知道调查结果,我很想知道.. :)

【讨论】:

    【解决方案2】:

    我发现了问题。它与方法签名有关。

    打印出抛出异常的消息,它说:

    No signature of method: hms.FormatterService.formatList() is applicable for argument types: (java.util.TreeSet, java.lang.String) values: (...) Possible solutions: formatList(java.util.List, java.lang.String)

    因此,在 Groovy 中的弱类型辅助下出现了一个新手错误(希望将 TreeSet 传递给 List)... :P

    我已将方法签名更改为

    def formatList ( items, String fmt) {
    

    并将其称为

    def activeHosts = ...
    OutputObject o = formatterService.formatList(activeHosts, params.format as String)
    

    现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多