2009-06-26 66 views
2

在Grails應用程序中,我正在尋找一些方法將數據從控制器操作傳遞到操作後運行的過濾器。我喜歡思考的東西:從控制器向過濾器傳遞數據

class MyController { 
    def myAction = { 
     render(view:"myView", model:[key: "value"]) 

     passData { 
      // Do some processing here 
      name = "paolo" 
      age = 38 
     } 
    } 
} 

public class MyFilters { 

    def name 
    def age 

    def filters = { 
     myFilter(controller: "*", action: "*") { 
      after = { model -> 
       // Do something with name and age 
       return true 
      } 
     } 
    } 
} 

最初的計劃是做在BootStrap.config的的init()關閉以下幾點:

  • 使用元編程添加一個「passData(閉幕pdClosure)「方法
  • 將pdClosure的委託設置爲MyFilters,以便在此閉包中設置名稱和年齡屬性時,它們將在MyFilters實例上進行設置。

但是,我意識到這是行不通的,因爲沒有明顯的方式讓我訪問(從BootStrap.init)MyFilters實例,該實例將被調用特定的控制器。

同樣,似乎沒有任何方式可以從過濾器中訪問控制器實例。當然,我可以將所有的數據填充到模型中,但是我想知道是否有更好的方法在兩者之間傳遞數據?

謝謝, 唐

回答

3

模型傳遞您的數據似乎相當不錯的優雅,易於給我。如果出於某種原因不希望它可用於視圖,則甚至可以從過濾器中的模型中刪除數據。

0

如果在您的過濾器中想要修改模型的數據,那麼您的解決方案看起來很好。

但是,如果您只是想將控制器的某些參數傳遞給過濾器,那麼請求屬性應該更好(如果您只需要該數據的請求範圍)。這樣你就不會混淆模型和一些請求參數。

相關問題