2011-03-15 15 views
5

Varsayılan denetleyici yönlendirme yöntemini geçersiz kılmaya çalışıyorum ve çalışmak için aşağıdaki kod parçasını elde edemiyorum.grails yeniden yönlendirme denetleyicisi yöntemini geçersiz kılma

Bir eklenti oluşturdum ve yönlendirmeyi değiştirmek için "doWithDynamicMethods" kullanmaya çalışıyorum.

def doWithDynamicMethods = {ctx -> 
    application.controllerClasses.each() { controllerClass -> 
     replaceRedirectMethod(controllerClass) 
    } 
} 

void replaceRedirectMethod(controllerClass) { 
    def oldRedirect = controllerClass.metaClass.pickMethod("redirect", [Map] as Class[]) 
    controllerClass.metaClass.redirect = { Map args, Map params -> 
     // never seems to get here  
    } 
} 

İmzam yanlış mı yoksa bir şey mi özlüyorum? Bunu yapmamın nedeni, belirli bir koşulun yerine getirilmesi durumunda yönlendirme uri'yi değiştirmek isterim ancak oturum açma/yazdırma ifadeleriyle, uygulamanın başlatılması/derlenmesi üzerine "replaceRedirectMethod" uygulamasına geçtiğini görüyorum ama Uygulama başlatıldıktan sonra denetleyici üzerinden bir yönlendirme yaparken oraya gitmeyin.

cevap

3

Evet, imza yanlış - yönlendirme Ayrıca unutmayın o

controllerClass.metaClass.redirect = { Map args -> 
    // pre-redirect logic 
    oldRedirect.invoke delegate, args 
    // post-redirect logic 
} 
0

olmalıdır tek Map parametre (org.codehaus.groovy.grails.plugins.web.ControllersGrailsPlugin.registerControllerMethods() bildirgesini bakınız) Yani

sürdüğünü size redirect yöntem geçersiz kılmayı istiyorsanız Bir denetleyicinin kaynak kodunu değiştirdikten sonra yeniden uygulanmalıdır, aşağıdakileri yapmanız gerekir:

def watchedResources = [ 
    "file:./grails-app/controllers/**/*Controller.groovy"] 

def onChange = { event -> 
    if(!(event.source instanceof Class)) return 

    if(application.isArtefactOfType(ControllerArtefactHandler.TYPE, event.source)) 
    { 
    replaceRedirectMethod(application.getArtefact(ControllerArtefactHandler.TYPE, 
                event.source.name)) 
    } 
} 
İlgili konular