0

私はGrailsが初めてで、小さなプロジェクトに取り組んでいます。私が問題を抱えているのは、私の XML 読み取りサービス (ReadService) にread()を返す関数があることXmlSlurper()です。関数は xml ファイルを読み取り、コンソールに .xml で書き込みますprintln。しかしXmlSlurper、Bootstrap で結果を印刷しようとすると、何も得られません。

class BootStrap {
  def ReadService

  def init = { 
     servletContext ->
     def xml = ReadService.read()
     println xml
  }
}

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

1

サービスのスペルが間違っているようです。に保存ReadServiceする必要がありますgrails-app/services

サービスを使用するには、次のように宣言する必要があります

def readService

その中initで、次のように使用できます。

def xml = readService.read()

ご覧のとおり、最初の文字は小文字にする必要があります。

于 2012-08-27T12:27:55.630 に答える
0

さて、問題はxml自体を読むことではなく、それを使ってブートストラップすることにあることがわかりました.Service名をlovercaseに変更することが助けになりました。ReaderService を使用して、アドレスを含む xml ファイルを読み取り、アドレス オブジェクトを構築します。これが私のBootstrapコードです: `

class BootStrap {
     def readService 

      def init = { 
         servletContext ->
         def xml = readService.read()
         println xml
       def adress = new mobilmed.Adres(ulica:xml.adress.street, dom:xml.adress.house, miejscowość:xml.adress.residance, kodPocztowy:xml.adress.postCode, poczta:xml.adress.post).save()
        if(adres.hasErrors()){
       println adres.errors}
      }
}

実行すると、古典的な「そのようなプロパティはありません」というエラーが発生しました。

| Error 2012-08-28 06:42:36,784 [pool-7-thread-1] ERROR context.GrailsContextLoader  - Error executing bootstraps: No such property: adres for class: BootStrap
Message: No such property: adres for class: BootStrap
   Line | Method
->>  10 | doCall                           in BootStrap$_closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   301 | evaluateEnvironmentSpecificBlock in grails.util.Environment
|   294 | executeForEnvironment . . . . .  in     ''
|   270 | executeForCurrentEnvironment     in     ''
|   303 | innerRun . . . . . . . . . . . . in java.util.concurrent.FutureTask$Sync
|   138 | run                              in java.util.concurrent.FutureTask
|   886 | runTask . . . . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run                              in     ''
^   662 | run . . . . . . . . . . . . . .  in java.lang.Thread

もちろん、私はチェックしましたが、定義された変数のBoostrapingは次のようにうまく機能します:

def karolzam = new mobilmed.Adres(ulica:"Turkusowa", dom:"8/22", miejscowość:"Lublin", kodPocztowy:"20-572", poczta:"Lublin").save()
        if(karolzam.hasErrors()){
       println karolzam.errors} 

ブートストラップは、コンソールに出力できる変数を「認識」していないようです。:/

于 2012-08-28T04:59:02.033 に答える