2011-06-07 67 views
2

想象一下這樣的控制器:Grails的控制器重複的代碼爲所有操作

class exampleController{ 

def action1 = {} 

def action2 = {} 

def action3 = {} 

def action4 = {} 

def action5 = {} 

} 

我希望能夠在所有的行動來回報這個控制器相同PARAMS。想象一下:

def user = session.user  
[user: user] 

除了在所有操作上寫出所有相同的代碼之外,是否有這樣做的方法? session.user返回參數只是一個例子。我不想真的回報它。

回答

5

一個簡單的解決辦法是把這個代碼在一個方法並調用它從每個動作

class exampleController{ 

    def action1 = {getModel()} 

    def action2 = {getModel()} 

    def action3 = {getModel()} 

    def action4 = {getModel()} 

    def action5 = {getModel()} 

    private getModel() { 
    def user = session.user  
    [user: user]  
    } 
} 

雖然這並涉及一些量的重複(調用相同的方法),這裏發生了什麼更明顯。在調試/測試控制器時,很容易忘記過濾器和攔截器,這通常會導致如下問題:

@ **%在這裏發生了什麼?

0

我有一個類似的情況,我修改了控制器發生器的grails腳手架。

class MyClassController { 

    def list = { 
     ... 
    } 

    def show = { 
     def eInstance = beanIfExist() 
     ... 
    } 

    def edit = { 
     def eInstance = beanIfExist() 
     ... 
    } 

    def update = { 
     def eInstance = beanIfExist() 
     ... 
    } 

    def delete = { 
     def eInstance = beanIfExist() 
     ... 
    } 

    def beanIfExist = { 
     def beanInstance = MyClass.get(params.id) 
     if (beanInstance) { 
      return beanInstance 
     } else { 
      flash.message = "Error, invalid record." 
      redirect(action: "list") 
      return null 
     } 
    } 

} 

這是我的建議,現在如果你需要另一個發送數據來查看,那麼你可以使用攔截器。

相關問題