Grails "теряет" пользовательское сопоставление URL при переходе по любым ссылкам на странице - PullRequest
1 голос
/ 10 мая 2011

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

/map/browse
/map/list

Теперь я хотел бы ограничить эти представления просто отображением карт конкретного пользователя, например, через

/user/3/browse
/user/3/list

Итак, я создал отображение:

"/user/$userId/browse" {
  controller = "map"
  action = "browse"
}

"/user/$userId/list" {
  controller = "map"
  action = "list"
}

Теперь я могу перейти к /user/3/browse, но как только я нажму на ссылку нумерации страниц или поменяю фильтры нумерации страниц, URL вернется к /map/browse.

Также, если я установлю userId на null в контроллере, я получу ошибку:

Ошибка 500: Ошибка обработки GroovyPageView: Ошибка выполнения тега: Невозможно создать URL для сопоставления [/ user / (*) / list] и параметров [["action": "list", "controller": "map", "max": 20, "offset": 0, "sort": "uploadDate", "order": "desc", "userId": null, "totalMaps": 30]]. Параметр [userId] обязателен, но не указан! в /views/map/browse.gsp:26

Нумерация страниц работает следующим образом:

<div class="paginateButtons">
    <g:paginate controller="map" action="browse" total="${mapInstanceTotal}"></g:paginate>
</div>

Что я могу сделать против этого или как правильно реализовать то, что я хочу?

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

1 Ответ

4 голосов
/ 10 мая 2011

Похоже, проблема не в вашей конфигурации отображения URL, а в том, как вы создаете ссылку.Я думаю, что лучше, если вы используете Named URL Mapping : теперь это понятнее, чем ваш подход, и когда вы создаете ссылку для нумерации страниц, вам нужно только указать имя URL.Например:

В UrlMappings.groovy:

static mappings = {

    name accountDetails: "/details/$acctNumber" {
        controller = 'product'
        action = 'accountDetails'
    }
}

В поле зрения - страница gsp:

<g:link mapping="accountDetails" params="[acctNumber:'8675309']">
    Show Account
</g:link>
...