аннотации класса домена grails, не находящиеся в контроллере - PullRequest
1 голос
/ 19 марта 2012

Я создал следующую аннотацию:

public @interface NavAnnotation {

    boolean addToAdminMenu() default false;

}

... затем попробуйте аннотировать класс домена:

@NavAnnotation ( addToAdminMenu = true )
class Information {...}

... и сделать что-то с этим в контроллере:

def appDomainClasses = grailsApplication.domainClasses.findAll {
    it.class.isAnnotationPresent( NavAnnotation )

}
[ appDomainClasses : appDomainClasses ]

... но этот аннотированный класс не подбирают. Есть идеи о том, что мне не хватает?

1 Ответ

4 голосов
/ 19 марта 2012

Пара вещей ...

1.) Убедитесь, что ваша аннотация имеет политику хранения @Retention(RetentionPolicy.RUNTIME). Политика хранения RUNTIME позволяет аннотации быть доступной для отражения во время выполнения. Так что ваш интерфейс должен выглядеть так ....

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface NavAnnotation {
    boolean addToAdminMenu() default false;
}

2.) grailsApplication.domainClasses возвращает DefaultGrailsDomainClass, а не фактический класс, на котором вы хотите отразить отражения. Вместо этого вы хотите получить доступ к подчеркивающему классу с помощью метода getClazz (), как этот ...

def appDomainClasses = grailsApplication.domainClasses.findAll {
    it.getClazz().isAnnotationPresent( NavAnnotation )

}

Я проверил, чтобы убедиться, что это работает. Наслаждайтесь!

-Спасибо

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