2012-03-19 7 views
1

にピックアップされていないGrailsのドメインクラスのアノテーションは、私は、次の注釈を作成したコントローラ

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

を...とやりますコントローラーでそのようなもの:

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

} 
[ appDomainClasses : appDomainClasses ] 

...注釈付きクラスは取得されていません。私は何が欠けているかについての任意のアイデア?

答えて

3

カップルの事...

1)あなたの注釈が@Retention(RetentionPolicy.RUNTIME)の保持ポリシーを持っていることを確認してください。 RUNTIME保存ポリシーを使用すると、注釈を実行時に反映させることができます。だからあなたのインターフェイスはDefaultGrailsDomainClassはなく、あなたが上の反射をプリフォームしたい実際のクラスを返しますgrailsApplication.domainClasses

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 ....のようになります。代わりに、私はそれが動作することを確認するためにテストしてみた

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

} 

....このようなgetClazz()メソッドを使用して、下線クラスにアクセスしたいです。楽しい!

-Thanks

+0

...今夜は更新します。 – vector

+0

...追加されました @Target(ElementType.ANNOTATION_TYPE) @Retention(RetentionPolicy.RUNTIME)でも喜びはありません – vector

+0

クラスに注釈を付けるので、ターゲットはCLASSにする必要があります。実行時に利用できるアノテーションのprintlnの結果を表示してください。 –

関連する問題