У меня есть на моей странице GSP тег <g:link action="test" params='["present": "yes"]', при нажатии которого я отправляюсь на URL-адрес, заканчивающийся на /test?present=yes.

Если я определю этот настраиваемый тег lib:

class HelperTagLib {
    static defaultEncodeAs = 'html'

    static returnObjectForTags = ['passthrough']

    def passthrough = { Map attrs, Object body ->
        return attrs
    }
}

И добавьте его в тег <g:link action="test" params='${passthrough(["present": "yes"])}', внезапно мой URL заканчивается на /test, полностью теряя параметры.

Почему это происходит и как это обойти?

1
Kiwi 20 Май 2014 в 05:31

2 ответа

Лучший ответ

Разрешите вашей библиотеке тегов отображать эту ссылку за вас. Попробуйте это </g:passthrough> в gsp и taglib

def passthrough = { attrs, body -> out << g.link(controller: 'foo', action: 'test', params: [present: 'yes']) }
1
Swapnil Sawant 22 Май 2014 в 17:28

Я вижу, что вы пропустили g.taglibname при вызове taglib, это должно быть так

<g:link action="index" params="${g.doSomething(present:true)}">Ir</g:link>

Я сделал это сам и все работает нормально

Но если вы хотите перехватить некоторые параметры, а затем обработать до завершения запроса, возможно, лучшее решение - использовать функцию beforeInpreceptor или какой-либо фильтр.

Подробнее о перехватчиках здесь http://www.grails.org/ doc / 2.3.x / ref / Controllers / beforeInterceptor.html

Надеюсь, это поможет

0
Mario 20 Май 2014 в 17:42