1

我有一个应用程序,用户可以通过两种方式浏览地图(如缩略图和列表)

/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

另外,如果我在控制器中设置为userIdnull我会收到错误:

错误 500:处理 GroovyPageView 时出错:执行标签时出错:无法为映射 [/user/(*)/list] 和参数 [["action":"list"、"controller":"map"、"max" 创建 URL :20,“偏移”:0,“排序”:“uploadDate”,“订单”:“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 映射,我只需要一种很好的说法:“仅显示一个用户的地图”

4

1 回答 1

4

似乎问题不在于您的 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>
于 2011-05-10T08:52:56.327 回答