0

私の目標は、さまざまなドメイン クラス間で一部のコードを再利用して、最終的に gsp のさまざまなリスト ボックスに入力できるようにすることです。私はサービスを持っていますが、プラグインするのにほとんど運がありませんでした.これが私のコードです.

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]
}


}

ドメイン クラスの 1 つの中で、次のように制約ブロックで使用してみました。

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 に答える