2012-02-11 4 views
2

プレイ!ドキュメントは@Beforeフィルタが子クラスコントローラ(ref)にカスケードすることを示しています。Playで@Before(サブタイトルにカスケードしないアノテーションのみ= {"method"})フレームワーク?

のは、私が持っているとしましょう:ユーザー#ショーが呼び出されると

public class BaseController extends Controller { 
    @Before(only={"show"}) 
    public static void check() { 
     Logger.info("checking..."); 
    } 
} 

public class Users extends BaseController { 
    public static void show(Long id) { 

    } 
} 

、私は「...チェック」が表示されることを期待するが、それはしていません。 @BeforeフィルタをUsersクラスに移動すると、メッセージが表示されます。唯一の修飾子を削除すると、メッセージも表示されます。

なぜ@Beforeフィルタとともに唯一の変更子がカスケードしないのですか?

答えて

0

"only"は、それを宣言するクラス(この場合はBaseController)に当てはまると思います。タグが解決されると、PlayはBaseConrollerのshowメソッドを探します。

+0

これは私にとっても同様です。 BaseControllerに長時間のショーとして「show」メソッドを追加しようとしましたが、@Beforeフィルターはまだ無視されています。だから私はまだ立ち往生している。 –

0

代わりに、独自の注釈を付けてクラスに配置することができます。

@With(NewAnnonation.class) 
public class YourClass() extends Controller { methods} 

次に、希望のクラスで新しいアノテーションを使用できます。

public class NewAnnotation() extends Controller { 
@Before(only = { "YourClass.method1", "YourClass.method2", "SomeOtherClass.method"}) 
public static void doSomeThingBeforeMethods() {insert code :)} 
関連する問題