簡體   English   中英

覆蓋grails g:鏈接標記

[英]override grails g:link tag

我試圖覆蓋g:link標記,以便我可以為額外的字符串添加前綴。 這是我的代碼:

import org.codehaus.groovy.grails.plugins.web.taglib.*

class ApplicationTagLib {

    static namespace = "g"

    def link = { attrs, body ->
        if("es".equalsIgnoreCase(request.stLocale.language)) {
            attrs['controller'] = "es/" + attrs['controller']
        }
        def applicationTagLib = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
        applicationTagLib.link.call(attrs, body)
    }
}

這工作正常,除了當我添加“es /”時,生成的路徑被轉換為es%2F而不是es /,這導致鏈接不起作用。

有沒有辦法防止這種情況自動編碼新的斜杠或更好的方法將此字符串作為前綴添加到控制器路徑?

您應該知道,在Grails中,控制器包(因此它在項目結構路徑中的位置)與默認URL映射不相關 - 結構被展平。

因此,您添加到控制器名稱的斜杠將被編碼,否則它將構成URL的一部分(因此不會映射到控制器)。

也許處理不同語言環境的邏輯最好放在控制器中。

您可以通過配置UrlMappings.groovy在Grails標記生成的所有鏈接中添加此“/ es”前綴。 如果你使用的是由grails create-app命令生成的默認值,你可以在你的URL中添加'/ es',如下所示:

class UrlMappings {

    static mappings = {
        "/es/$controller/$action?/$id?" {  // <---------- added '/es' prefix
            constraints {
                // apply constraints here
            }
        }

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

要了解有關URL映射的更多信息,請參閱Grails指南

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM