Как создать canocical из контроллера в Grails? - PullRequest
1 голос
/ 24 февраля 2011

В Grails у меня есть ссылка, как / myapp / questions / all

Параметр all (all, ответил, ...) передан в мой контроллер.

У меня есть форма для поиска вопроса в зависимости от типа: всего, в ответе, ... В форме поиска у меня есть скрытое поле для передачи параметра.

Но отображается URL / myapp / questions / ans / myapp / questions / all

Поэтому я попытался с помощью url: url = "[action: 'question', controller: 'mycontroller', params: ['monparam': '$ {mavariable}']]"

но это не работает.

Есть идеи?

Спасибо

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Вы можете сделать это так:

class UrlMappings {

    static mappings = {
        name nameOfTheMapping: "/question/$para/" {
            controller = "mycontroller"
            action = "question"
        }
    ...

Затем вы можете получить доступ к отображению:

<a href='${createLink(mapping: 'nameOfTheMapping', params: [para: para.encodeAsUrl()])}' title='test'>Test</a>

Приведенный выше код создан в моем taglib, поэтому он может немного отличаться, если вы хотите использовать его в представлении.

0 голосов
/ 24 февраля 2011

Вам необходимо отредактировать grails-app/conf/UrlMappings.groovy и создать сопоставление с контроллером, в котором пропущено действие. (поскольку вы обрабатываете все это за одно действие)

что-то вроде

"/questions/$question_type" (controller: 'questions', action: 'your_action')

где "your_action" - это имя действия, которое обрабатывает эти запросы.

Затем в QuestionsController.groovy:

def your_action = {
    // use question_type as needed
    def questions = Questions.findByQuestionType(params.question_type)
    // etc.
}

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

0 голосов
/ 24 февраля 2011

Я не совсем понимаю ваш вопрос, но, похоже, вы не следуете соглашению Грааля. URL имеет вид

/app/controller/action

поэтому grails интерпретирует часть «all» вашего URL как действие, которое вызывается на контроллере вопросов (что я получил по вашей ссылке, например /myapp/questions/all').

Где я запутался, так это с вашей спецификацией URL.

 url="[action:'question', controller:'mycontroller', params:['monparam':'${mavariable}']]"

Исходя из этого, у вас должен быть контроллер под названием «mycontroller» с действием, называемым «вопрос». URL, который вы увидите в браузере, будет

/ приложение / mycontroller / вопрос monparam: любой

См. здесь для получения подробной информации о контроллерах в целом.

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