URL-адреса отображения Grails - PullRequest
2 голосов
/ 12 июля 2010

верно, в основном у нас есть ссылка на нашу систему, которая строчная, но должна быть в верблюжьем корпусе. вместо того, чтобы заставить других разработчиков это исправить, я хочу просто устранить проблему с помощью URL-магии

"/myobj/$action?/$id?"{ 
    controller: "myObj"        
}

я пытаюсь сопоставить все, что ссылается на контроллер myobj, с контроллером myObj, и сохранить действие и все остальное таким же. Приведенный выше код дает исключение, сказав,

2010-07-11 18:14:50,021 ERROR [default] - Servlet.service() for servlet default threw exception
java.lang.IllegalArgumentException: URL mapping must either provide a controller or view name to map to!

однако следующие работы

 "/myobj/$action?/$id?"(controller: "myObj")

Не понимаю, учитывая документацию. Почему не работает закрытие? Это граальс 1.2.0 ...

1 Ответ

7 голосов
/ 12 июля 2010

Вы должны использовать

'/myobj/$action?/$id?' {
    controller = 'myObj'
}

Редактировать В качестве пояснения: двоеточие в рабочем примере создает карту, как описано здесь (рабочий случайявляется вызовом функции Groovy с именованными параметрами).Внутри замыкания необходимо установить значение свойства контроллера напрямую, т. Е. С помощью знака равенства.

Это различие продемонстрировано, если не указано особо в документации по сопоставлению URL-адресов Grails .

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

'$myController/$action?/$id?' {
    grailsApplication.getArtefacts('Controller').find { it.name.toLowerCase() == myController.name.toLowerCase }.with { controller = it.name }
}

Я предполагаю здесь (что я не проверял)что приложение Grails доступно в MappingCapturingClosure в DefaultMappingUrlEvaluator .

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