2010-05-27 23 views
14

Bir HTTP durum kodu 500 aldığımda, çalışma ortamına göre 2 farklı sayfa görüntülemek istiyorum. geliştirme modunda yılındaÇevreye bağlı olarak bazı URL eşlemeleri nasıl yapılır?

, bir stackStrace sayfasını görüntülemek istediğiniz üretim modunda ve (varsayılan Grails 500 hata sayfası gibi), ben resmi bir "iç hata" sayfasını görüntülemek için istiyorum.

mümkün mü ve bunu nasıl yapabilirim?

cevap

19
Sen kurtarma

Onun çok değil UrlMappings.groovy

grails.util.GrailsUtil içinde çevre özgü eşleştirmeleri yapabilirsiniz

, ama

import grails.util.GrailsUtil 

class UrlMappings { 
    static mappings = { 


     if(GrailsUtil.getEnvironment() == "development") { 

      "/$controller/$action?/$id?"{ 
       constraints { 
        // apply constraints here 
       } 
      } 

      "/"(view:"/devIndex") 
      "500"(view:'/error') 
     } 

     if(GrailsUtil.getEnvironment() == "test") { 
      "/$controller/$action?/$id?"{ 
       constraints { 
        // apply constraints here 
       } 
      } 

      "/"(view:"/testIndex") 
      "500"(view:'/error') 

     } 



     if(GrailsUtil.getEnvironment() == "production") { 
      "/$controller/$action?/$id?"{ 
       constraints { 
        // apply constraints here 
       } 
      } 

      "/"(view:"/prodIndex") 
      "500"(view:'/error') 

     } 
    } 
} 
+0

Thx. Ben deneyeceğim ve bu konuya güncelleyeceğim. SADECE "500" haritalaması için koşulların olması mümkün değil mi? – fabien7474

+0

Evet. Yukarıdaki sadece bir örnek – tinny

+0

çok teşekkür ederim. İşe yarıyor! – fabien7474

14

Bunu yapmanın daha temiz bir yolu olabilir, ancak bir denetleyiciye hata kodu haritalama ve orada mantığını uygulayarak ile var ediyorum: İlgili kontrolör (grails-app

class UrlMappings { 

    static mappings = { 

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

     "/"(view:"/index") 

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

ve oluşturulacak /conf/controllers/ErrorsController.groovy):

import grails.util.Environment 

class ErrorsController extends AbstractController { 

    def accessDenied = {} 

    def notFound = {} 

    def notAllowed = {} 

    def serverError = { 
     if (Environment.current == Environment.DEVELOPMENT) { 
     render view: '/error' 
     } 
     else { 
     render view: '/errorProd' 
     } 
    } 
} 

Sen grails-app/views/hatalar (accessDenied.gsp, notFound.gsp, vb) ve ayrıca yeni karşılık gelen GSPs oluşturmanız gerekir grails-Uygulama/görüntüleme/errorProd.gsp. Tüm hata kodları için bir denetleyici yöntemine yönlendirerek, gelecekte diğer hata kodu işleyicilerine mantık eklemeyi kolaylaştırırsınız.

+0

teşekkür ederiz çok sorunu

Ör çözecek düşünüyorum çok Burt. – fabien7474

+1

Bir şekilde 405 için çalışmıyor. Benim durumumda diğer tüm yanıt kodları için çalışıyor. –