2010-05-11 10 views
6

Grails, varsayılan olarak, URL'yi denetleyici eylemlerine veya görünümlerine eşleştirirken büyük/küçük harfe duyarlıdır. Örneğin, www.mywebsite.com/book/list çalışacak, ancak www.mywebsite.com/Book/list bir 404 sayfası döndürecektir. Örneğin, www.mywebsite.com/book/list çalışacaktır.URL eşleme durumum nasıl duyarsız olmaz?

URL'm büyük/küçük harfe duyarlı hale getirmek için (kod snippet'leri karşılandı) ne yapabilirim (ör. Www.mywebsite.com/Book/list geçerli bir URL'dir)?

+0

http://www.clearlyinnovative.com/case-insensitive-url-mappings-in-grails dayalı Grails 2.4 çalışır nasıl? Yoksa kodunuzdaki URL'lerin kontrolünde değil misiniz? –

+0

İşte önemli olan bu! Temel olarak soru şudur: UrlMapping.groovy dosyası veya başka bir şey ile Grails içinde bunu nasıl yapılır. – fabien7474

cevap

0

kalça sadece ateş, aşağıdakileri deneyin:

static mappings = { 
"/$controller/$action?/$id?"{ 
    controller = controller.toLowerCase() 
    action = action.toLowerCase() 
} 
+0

Çalışmıyor: hatta kötü, bir istisna atar! – fabien7474

0

Denetleyici bir "ayrılmış anahtar kelime" dir siz "controllerName"

 
static mappings = { 
"/$controllerName/$action?/$id?"{ 
    controller = {"${params.controllerName}".toLowerCase()} 
    action = action.toLowerCase() 
} 
+0

Hayır, bu aşağıdakileri verir: '' null nesnesindeLowerCase() yöntemine yöntem uygulanamıyor. – confile

+0

Yani null olan bir eylemi nasıl ele alacağınızı bilmiyorsunuz? Ben bir non-brainer demedim –

0

Aaron Saunders vardır gibi bir sunucu yeniden adlandırmak zorunda Burada büyük bir çözüm olarak, ancak sitemi benim için engellendi. İşte onun harika çözümü. Doğrulandı, Grails 2.x'te harika çalışıyor. İşte

import org.codehaus.groovy.grails.commons.GrailsClass 

class UrlMappings { 

    def grailsApplication 

    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 
     //Case InSeNsItIvE URLS!!! 
     "/$_ctrl/$_action/$id?" { 
      controller = { 

       def foundControllerMatch = false 
       def returnCtrl = params._ctrl 

       grailsApplication.controllerClasses.each { GrailsClass c -> 
        def l_className = c.name.toLowerCase() 

        // find the class 
        if (params._ctrl?.equalsIgnoreCase(l_className) && foundControllerMatch == false) { 
         foundControllerMatch = true 
         returnCtrl = c.getLogicalPropertyName() 
         //println " foundControllerMatch ${returnCtrl}" 
        } 
       } 

       return returnCtrl 
      } 

      action = { 

       def foundActionMatch = false 
       def returnAction = params?._action 
       def returnCtrl = params._ctrl 

       grailsApplication.controllerClasses.each { GrailsClass c -> 
        def l_className = c.name.toLowerCase() 

        // find the class 
        if (params._ctrl?.equalsIgnoreCase(l_className) && foundActionMatch == false) { 

         returnCtrl = c.name 

         c.URIs.each { _uri -> 

          if (foundActionMatch == false) { 
           def uri = _uri 

           //println "u-> $uri" 

           def uri_action 
           uri_action = uri.split('/')[2] 

           //println "uri_action-> $uri_action" 
           if (uri_action?.trim()?.equalsIgnoreCase(params._action.trim())) { 
            foundActionMatch = true 
            returnAction = uri_action 
           } 
          } 
         } 
        } 
       } 

       return returnAction 

      } 

     } 
    } 
} 
0

I Just sonra bunları kullanmadan önce küçük harf içine Url'lerinize dönüştürmek olamaz, düşünme

 "/$_ctrl/$_action/$id?" { 
     controller = { 
      def foundControllerMatch = false 
      def returnCtrl = params._ctrl 

      def grailsApplication = Holders.getGrailsApplication() 


      grailsApplication.controllerClasses.each { GrailsClass c ->; 
       def l_className = c.name.toLowerCase() 

       // find the class 
       if (params._ctrl?.equalsIgnoreCase(l_className) && foundControllerMatch == false) { 
        foundControllerMatch = true 
        returnCtrl = c.getLogicalPropertyName() 
//     println " foundControllerMatch ${returnCtrl}" 
       } 
      } 
      return returnCtrl 
     } 

     action = { 
      def foundActionMatch = false 
      def returnAction = params?._action 
      def returnCtrl = params._ctrl 

      def grailsApplication = Holders.getGrailsApplication() 

      grailsApplication.controllerClasses.each { GrailsClass c ->; 
       def l_className = c.name.toLowerCase() 

       // find the class 
       if (params._ctrl?.equalsIgnoreCase(l_className) && foundActionMatch == false) { 

        returnCtrl = c.name 

        c.URIs.each { _uri ->; 

         if (foundActionMatch == false) { 
          def uri = _uri 

//       println "u-> $uri" 

          def uri_action 
          uri_action = uri.split('/')[2] 

//       println "uri_action-> $uri_action" 
          if (uri_action?.trim()?.equalsIgnoreCase(params._action.trim())) { 
           foundActionMatch = true 
           returnAction = uri_action 
          } 
         } 
        } 
       } 
      } 
      return returnAction 
     } 

     }