Класс домена недоступен в моем контроллере

Я новичок в Grails и groovy.
Я создал доменный класс

\grails-app\domain\Abc

Теперь я создал контроллер в

\grails-app\controllers\myapp\myController

В этом, когда я создал объект, он показывает ошибку.

def Abc obj = new Abc

Ошибка, которую я получил,

unable to resolve class Abc 

Я пытался импортировать, но там тоже не отображается. Я работаю в Grails 1.3.7 и IntelliJ IDEA 10.0.2
Спасибо.


person Jithin    schedule 04.04.2011    source источник


Ответы (2)


Убедитесь, что расположение каждого класса соответствует объявлению класса и пакета.

Я создал класс домена

\grails-приложение\домен\Abc

Этот класс должен выглядеть так

class Abc {
    // implementation omitted
}

убедитесь, что у вас нет объявления пакета, потому что в зависимости от местоположения этот класс должен быть в пакете по умолчанию (что на самом деле является плохой практикой). В идеале вы должны поместить этот класс в пакет, а затем переместить исходный файл в подкаталог \grails-app\domain, который соответствует имени пакета.

Теперь я создал контроллер в

\grails-app\controllers\myapp\myController

Этот класс должен выглядеть так

package myapp
  
class myController {
    // implementation omitted
}

Обратите внимание, что этот класс должен называться строчной буквой «m», потому что именно так назван файл. Стандартные соглашения об именах Java/Groovy требуют, чтобы классы начинались с заглавной буквы.

В этом, когда я создал объект, он показывает ошибку.

def Abc obj = new Abc

Есть несколько проблем с этим кодом:

  • определить тип как def или Abc, но не оба
  • вам не хватает некоторых скобок

Попробуйте это вместо этого:

Abc obj = new Abc()
person Dónal    schedule 04.04.2011

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

Класс домена:

package myapp

class Book {
...
}

Класс контроллера

package myapp

class BookController {
....
}
person Hoàng Long    schedule 04.04.2011
comment
Если его контроллер уже находится в пакете с именем myapp, то он находится в правильной папке. - person Dónal; 04.04.2011
comment
@Don: я думаю, что лучше максимально упростить; и приведите рабочий пример. Если контроллер в папке myapp, класс домена тоже должен быть в domain/myapp. - person Hoàng Long; 04.04.2011
comment
Спасибо за ответ... проблема была с пакетом - person Jithin; 04.04.2011