переопределить Grails G: тег тега - PullRequest
3 голосов
/ 12 марта 2011

Я пытаюсь переопределить тег 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 /, что приводит к тому, что ссылка не работает.

Есть ли способ предотвратить автоматическое кодирование новой косой черты или лучший способ добавить префикс этой строки к пути контроллера?

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Вы можете добавить этот префикс '/ es' во все ссылки, сгенерированные тегами grails, настроив свой UrlMappings.groovy.Если вы используете файл по умолчанию, сгенерированный командой grails create-app, вы можете добавить «/ es» в свои URL-адреса следующим образом:

class UrlMappings {

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

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

Чтобы узнать больше о сопоставлениях URL, см. Grails Guide .

С уважением

1 голос
/ 12 марта 2011

Вы должны знать, что в Grails пакет контроллера (таким образом, это местоположение в пути структуры проекта) не коррелирует с отображением URL по умолчанию - структура уплощена.

Косая черта, которую вы добавляете к имени контроллера, таким образом кодируется, поскольку в противном случае она была бы частью URL (и, следовательно, не отображалась в контроллере).

Возможно, в любом случае, логика для работы с разными локалями лучше разместить в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...