0

我的目标是能够在我的各种域类中重用一些代码,最终在我的 gsps 中填充各种列表框。我有一项服务,但插入它时运气不佳。这是我的代码。

填充列表框服务:

import org.codehaus.groovy.grails.commons.ApplicationHolder as AH 
import groovy.sql.Sql

class PopulateListBox {

def dataSource = AH.application.mainContext.dataSource
def sql

def getStates(){

    sql = new Sql(dataSource)
    def states = []
    sql.eachRow("SELECT stvstat_desc FROM stvstat ORDER BY stvstat_desc"){
        states.add(it.stvstat_desc)
    }

    sql.close()

    [states:states]
}


}

在我的一个域类中,我尝试在约束块中使用它,如下所示:

def PopulateListBox

static constraints = {
    nursingLicenseState(blank:false, inList:PopulateListBox.getStates())
}

但这似乎不起作用。我如何引用我的服务并且仍然能够在我的视图中从域类访问它?

4

1 回答 1

1

一些东西:

  1. 您真的应该尝试遵守约定,并让您的服务以 *Service 结尾
  2. 在将服务注入域对象的地方,第一个字母需要小写。
  3. 在域对象中使用服务时,应将其声明为transient.

所以你的服务应该被创建(并且 Grails 通常默认附加这个):

class PopulateListBoxService {
    ...
}

然后你的域对象应该看起来像:

class MyDomainObject {
    def populateListBoxService
    ...
    static transients=['populateListBoxService']
    ...
}

让我知道它是否有效。

于 2012-10-29T19:44:21.887 回答