Плагин Grails Blurb - Невозможно разрешить класс Blurb

Я читал книгу Grails: Краткое руководство и столкнулся с проблемой. В книге мне предлагается установить плагин Blurb, который, кажется, работает, но заявляет, что мы будем использовать его, как если бы это был класс домена, и использовать его в качестве уже существующего контроллера. Код, который я должен добавить к контроллеру, выглядит так

def blurb = Blurb.findByName("custom_${event.id}" )
if (!blurb){
    blurb = new Blurb(name:"custom_${event.id}" , content:"" ).save()
}

Когда я это делаю, я получаю ту же ошибку в среде IDE и при запуске.

"не удалось разрешить класс Blurb", и я обращаюсь к этой строке blurb = new Blurb(name:"custom_${event.id}" , content:"" ).save()

Может ли кто-нибудь сказать мне, что может пойти не так? Я предполагаю, что плагин установлен правильно, потому что если я попытаюсь напрямую получить доступ к его контроллеру / действию 'http://localhost:8080/TekDays/blurb/create 'представление, предоставленное плагином, отображается правильно.

Спасибо!

- Для справки я использую STS / Grails 1.3.7.


Обновление 2011.05.12 7:45 CST

Я приложил снимок экрана, показывающий мой проект из интерфейса STS, чтобы показать, как мой проект оформлен в том случае, если он связан с пакетом, как указал Берт. Проблема, однако, в том, что я не уверен, что делать с оператором импорта, поэтому, возможно, этот снимок экрана поможет.

Вот текущий код в Dashboard Controller.

package tekdays

class DashboardController {
...
}

Я пробовал добавить следующие строки по предложению Берта, но я, очевидно, не прав

package tekdays
package my.package  <--unexpected token: package

class DashboardController {

Я попытался заменить мой на tekdays и default, и оба дали тот же результат.

Я что делаю неправильно?

Спасибо!

Grails ScreenShot


person dscl    schedule 11.05.2011    source источник


Ответы (1)


Класс Blurb находится в пакете по умолчанию, поэтому, если ваш контроллер находится в пакете, вам нужно использовать трюк Groovy для доступа к нему:

package my.package

import Blurb as Blurb

class MyController {

   def action = {
      def blurb = Blurb.findByName("custom_${event.id}" )
      if (!blurb) {
         blurb = new Blurb(name:"custom_${event.id}" , content:"" ).save()
      }
   }
}
person Burt Beckwith    schedule 12.05.2011
comment
@Burt Спасибо за помощь, но у меня должно быть что-то не так в исполнении твоего совета. Я обновил свой исходный вопрос, добавив результаты моих изменений и снимок экрана моего проекта Grails в STS. - Спасибо - person dscl; 12.05.2011
comment
Удалить пакет my.package. Вы не показали свой полный код контроллера, поэтому я предполагал, что он находится в пакете, и это было фиктивное имя. Единственное изменение, которое вам понадобится, - это добавить строку import Blurb как Blurb после строки package tekdays, чтобы обойти ограничение, заключающееся в том, что вы не можете (обычно) получить доступ к классам пакетов по умолчанию из классов в пакетах. - person Burt Beckwith; 12.05.2011
comment
@ Берт, хорошо, я удалил это, как вы предложили. Теперь это пакет tekdays, ваш оператор импорта, а затем мое объявление класса. Когда я это делаю, оператор импорта выдает ошибку «не удается разрешить класс Blurb». - person dscl; 12.05.2011
comment
Щелкните правой кнопкой мыши узел проекта в левом дереве и запустите Grails Tools | Обновить зависимости. Если вы установили плагин из командной строки, STS может не знать об этом. Если это не поможет, также запустите Project | Очистите, чтобы выполнить полную перекомпиляцию. - person Burt Beckwith; 12.05.2011
comment
@Burt Я выполнил указанные вами шаги, и, к сожалению, ошибка сохраняется в операторе импорта. Я устанавливал / удалял плагин так много раз, что не уверен, что текущая установка выполняется через командную строку диспетчера плагинов. - person dscl; 12.05.2011
comment
Думаю, вам нужно переместить класс Blurb в пакет. Я тестировал код прототипа, но теперь, когда я использую реальный плагин, он не работает, и, похоже, это связано с тем, как Grails компилирует код плагина отдельно от кода приложения. Создайте каталог tekdays в папке grails-app / domain плагина, переместите туда Blurb.groovy и добавьте строку пакета tekdays вверху. Удалите строку импорта Blurb as Blurb с вашего контроллера, так как теперь они будут в одном пакете. Вы можете связаться с автором и предложить ему сделать то же самое - классы всегда должны быть в пакетах. - person Burt Beckwith; 12.05.2011
comment
@Burt Кажется, проблема решена - большое спасибо за вашу помощь! - person dscl; 12.05.2011