2010-07-03 11 views

Odpowiedz

4

Zazwyczaj przekierowuję procedury obsługi kodu błędu do kontrolera, więc mogę wykonać rejestrowanie lub cokolwiek innego przed renderowaniem widoku. Można użyć, że tutaj też:

class UrlMappings { 

    static mappings = { 

     "/searchable/$action?"(controller: "errors", action: "urlMapping") 

     "/$controller/$action?/$id?" { } 

     "/"(view:"/index") 

     "403"(controller: "errors", action: "accessDenied") 
     "404"(controller: "errors", action: "notFound") 
     "405"(controller: "errors", action: "notAllowed") 
     "500"(view: '/error') 
    } 
} 

gdzie ErrorsController wygląda mniej więcej tak:

class ErrorsController { 

    def accessDenied = {} 

    def notFound = { 
     log.debug "could not find $request.forwardURI" 
    } 

    def notAllowed = {} 

    def urlMapping = { 
     log.warn "unexpected call to URL-Mapped $request.forwardURI" 
     render view: 'notFound' 
    } 
} 

i trzeba stworzyć accessDenied.gsp, notFound.gsp i notAllowed.gsp w grails- app/errors

Wysyłając "ukryty" kontroler do jego niestandardowego mapowania, możesz zalogować się do nieoczekiwanego dostępu, ale nadal renderować stronę 404, aby ukryć jej istnienie.

+0

To dobry pomysł, a następnie mogę sprawić, by wyglądał jak każdy inny błąd nie znalezionego zasobu. Lubię to! Stworzyłem /views/searchable/index.gsp, aby nadpisać plik dołączony do wtyczki, ale po prostu się go pozbędę i zrobię to w ten sposób. Dzięki! –

+0

@Burt - czy jest jakiś sposób, aby po prostu wyłączyć/usunąć UrlMapping przy starcie? To byłoby o wiele bardziej eleganckie rozwiązanie. –

+0

Prawdopodobnie możesz go usunąć, ale wątpię, by to była prosta naprawa. Wygląda na to, że jesteś dobrym kandydatem na żądanie funkcji. Prawdopodobnie można go zaimplementować, gdy wykonamy przestrzenie nazw kontrolerów (wstępnie (v.2.2)). –

Powiązane problemy