Граальс сервис внутри пакета - PullRequest
1 голос
/ 08 апреля 2011


Я довольно плохо знаком с Граалсом и весной
Я создал service, как это

services\com.mypackage\MyService 

, где

class MyService {
    static transactional = true

    def serviceMethod(params) {
         println "params:"+params
    }
}

Тогда, когда в моем контроллере

controller\com.mypackage\mycontroller

Тогда в его действии я попытался получить доступ вот так

def myaction= {
        com.mypackag.MyService myService //also used def myService
        myService.serviceMethod(params)
        render(view: "otherpage")
    }

Но это показывает следующую ошибку: (

java.lang.NullPointerException: Cannot invoke method serviceMethod() on null object

он не может стать объектом моей службы.

myService shows null

Какую ошибку я совершил?

Будет очень полезно, если кто-нибудь предоставит мне хороших простых ссылок и учебных пособий для использования сервиса с grails
Спасибо

Ответы [ 3 ]

4 голосов
/ 08 апреля 2011

Одна ошибка, которую вы сделали.
Вы заявляете, что myService внутри ваших myaction замыканий. Где это должно быть сделано в controller вне любого из ваших методов или замыканий .
Вы можете получить доступ к вашим методам обслуживания, используя ваш объект службы (здесь myService) внутри любого из ваших методов или замыканий

Так измените вот так
В вашем controller\com.mypackage\mycontroller объявите свой сервис первым

def myService 

Тогда вы можете получить к нему доступ в любой closures

 def myaction= {
        myService.serviceMethod(params)
        render(view: "otherpage")
    }
1 голос
/ 08 апреля 2011

Ваша иерархия каталогов не соответствует вашим пакетам. Вы должны изменить иерархию каталогов для вашей службы:

services\com\mypackage\MyService.groovy

и убедитесь, что вы добавили следующее в начало MyService.groovy

package com.mypackage

class MyService {
  // .....
}

Аналогичным образом измените иерархию каталогов для вашего контроллера на

controller\com\mypackage\MyController.groovy

Затем, чтобы получить ссылку на ваш сервис внутри вашего контроллера

// add the correct package statement
package com.mypackage

// rename the controller and the mycontroller.groovy file to MyController
class MyController {

  // this will be injected by Spring (it must be named with a lower-case 'm')
  def myService

  def myaction= {
    // use the service inside your action
    myService.serviceMethod(params)
    render(view: "otherpage")
  }
}
0 голосов
/ 08 апреля 2011

1) Я бы прочитал Руководство пользователя Grails по сервисам

2) Я бы сделал ваши сервисы используя инструменты командной строки, предоставляемые Grails, поскольку это избавит вас от помещения вещей в недопустимые каталоги (com.mypackage, поскольку имя папки не доставит вам ничего, кроме проблем), и это сделает уверен, что у вас есть правильные объявления пакетов в начале ваших groovy файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...