2017-05-02 9 views
0

Grailsのバージョン2.4.4から3.2.8へのアップグレードを進めています。 Grails 3ではインターセプタが導入されていますが、それでもフィルタはサポートされています。私は広範なフィルターをいくつか持っているので、フィルターを使い続けたいと思います。以下は、私が基本的に要求が何であるかを確認し、ビューレイアウトgspで使用される変数を設定するスニペットです。どのようにして作成したフィルタ(このフィルタを登録するのですか)を使用し続けるか、または次のものをインターセプタに変換するにはどうすればよいですか。Grails 3.2.8アップグレード:フィルターの実装

class AdminMenuFilters { 

    def ACTIVE_CLASS_NAME = "active" 

    def filters = { 

     admin(controller:'admin', action:'index') { 
      before = { 
       request.dashboardActive = ACTIVE_CLASS_NAME 
      } 
     } 

     layout(controller:'layout', action:'*'){ 
      before = { 
       def layoutActive = false 
       switch(actionName){ 
        case null : 
         layoutActive = true 
         break; 
        case "index" : 
         layoutActive = true 
         break; 
        case "tags" : 
         layoutActive = true 
         break; 
        case "how" : 
         layoutActive = true 
         break; 
       } 
       if(layoutActive){ 
        request.layoutActive = ACTIVE_CLASS_NAME 
       } 
      } 
     } 
    } 
} 

ご協力いただきありがとうございます。

答えて

0

推奨されているように、インターセプタを使用して解決策が見つかりました。 1つのフィルターではなく各コントローラーのインターセプターを作成してから、アクションが選択されたときにregexを使用してアクティブ変数を設定する必要があります。レイアウトコントローラ

class LayoutActiveInterceptor{ 

    LayoutActiveInterceptor(){ 
     match(controller:"layout", action: ~/(index|tags|how)/) 
    } 

    boolean before() { 
     request.layoutActive = Constants.ACTIVE_CLASS_NAME 
     true 
    } 

    boolean after() { true } 

    void afterView() { 
     // no-op 
    } 
} 

を使用して

例は、正直なところ、私は、これは1つのクラスファイルが十分にある状況だと思います。ちょうどその場合にフィルタを登録する方法に関するガイダンスは、最も高く評価されます。あなたの助けを前にありがとう。

関連する問題