2011-08-08 49 views
4

你怎麼UrlMappings當您添加的路由這樣Grails的路線 - 忽略CSS,JS和圖像

UPDATE忽略/ CSS,/ JS和/圖像

"$username"(controller:"profile",action:"show") { 
     constraints { 
      username(notInList:['css','js','images']) 
     } 
} 

燦我使用notInList?我該如何反轉inList?

+0

無法得到這個工作,要麼 - 約束。{ 用戶名(比賽: 「^ CSS |^JS | ^圖像」) } – BuddyJoe

回答

8

the manual

如果使用通配符URL映射,那麼你可能需要排除從Grails的URL映射過程一定的URI。要做到這一點,你可以提供一個不包括UrlMappings.groovy類的內部設置:

class UrlMappings = { 
    static excludes = ["/images/*", "/css/*"] 
    static mappings = { 
     … 
    } 
} 

這允許您從映射中排除目錄。

更新如果你想使用正則表達式,這可能會更好地工作:

constraints { 
    username(matches:"^(?!(js|css|images)/).*") 
} 

此正則表達式匹配任何開始與js/css/,或images/。它通過零寬度負前瞻匹配(?!…)

+0

謝謝不要知道我是如何錯過的,好奇,爲什麼我的代碼失敗了,這是除了500錯誤路由之外,我的UrlMapping.groovy文件中的最後一個路由,不應該有一個約束阻止它被處理。正則表達式正確 – BuddyJoe

+0

其實,你的正則表達式*只匹配以'css','js'或'images'開頭的東西,一個更好的正則表達式就是'^(!!(js | css | images)/)。 ' - 這是一個負面的前瞻,不匹配'js /','css /'或'images /',但它允許*開頭* js,css或圖像的字符串。 – OverZealous

+0

aww是的。很好的接收。謝謝+1要使用排除。更容易。 – BuddyJoe