将服务注入多个域类以在视图中使用

时间:2012-10-29 19:30:32

标签: grails

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

PopulateListBox服务:

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())
}

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

1 个答案:

答案 0 :(得分:1)

一些事情:

  1. 您应该真正尝试并遵守惯例,并以*服务
  2. 结束您的服务
  3. 如果将服务注入域对象,则第一个字母必须为小写。
  4. 在域对象中使用服务时,应将其声明为transient
  5. 因此应该创建您的服务(Grails通常会默认添加):

    class PopulateListBoxService {
        ...
    }
    

    然后您的域对象应该类似于:

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

    让我知道它是否有效。