Grails UrlMapping::已忽略匹配块中的视图属性

Grails UrlMapping::已忽略匹配块中的视图属性,grails,view,url-mapping,Grails,View,Url Mapping,给定URI/admin/article/index,为什么这个url映射不起作用 "/admin/$controller/$action?/$id?"{ view = "/admin/index" // no dice, ignored //action = "foo" // uncommented, this is picked up } 我希望所有管理员控制器在默认情况下都使用管理员视图(并且不必在每个控制器的每个操作中呈现视图)。“/account

给定URI/admin/article/index,为什么这个url映射不起作用

"/admin/$controller/$action?/$id?"{ 
        view = "/admin/index" // no dice, ignored 
        //action = "foo" // uncommented, this is picked up 
} 
我希望所有管理员控制器在默认情况下都使用管理员视图(并且不必在每个控制器的每个操作中呈现视图)。“/account/$controller/…”和任何其他应使用公共视图的站点模块也是如此


也许有另一种方法可以实现这一点,但假设UrlMappings就是实现这一点的地方…

看起来您正在尝试做一些与您编写的内容非常不同的事情

您已经在基本URL映射中映射了
操作
,并且视图是基于
控制器
自动选择的,因此您需要为那些没有控制器的视图创建一个映射,并为默认操作为
foo
的项目创建另一个映射。不过,控制器上的默认操作是
索引
,因此通常不需要在不指定控制器的情况下提供默认操作

一般来说,我认为您误解了MVC框架的工作原理。控制器不应呈现任何内容,视图应特定于控制器/操作。如果多个控制器呈现完全相同的视图,我愿意打赌要么控制器呈现HTML,要么视图过于复杂


您应该查看,它允许您创建默认模板结构,然后通过视图更改特定内容。

谢谢,foo操作什么都不做,只是验证urlmapping块是否实际匹配。是的,我所做的与MVC格调背道而驰。由于/admin下的每个控制器将使用完全相同的视图,因此为了满足controller to action.gsp约定而创建重复视图似乎毫无意义。管理屏幕都完全相同(仪表板、面包屑、自动完成搜索等),唯一不同的内容是表单本身,我非常乐意在管理布局+管理视图中看到。也许这是一种错误的方法,仅仅从视图开始。是的,这就是布局的全部用途。请参阅最后一个链接。当然,布局正是为了实现这一点,但对于每个控制器,我仍然需要定义一个view-action.gsp(或每个控制器操作呈现管理模板),这并不是非常枯燥,因为,同样,唯一不同的内容是控制器表单内容。我感到困惑。每个动作之间的唯一区别是表单内容,所以您希望一个包含所有表单的大视图,而不是每个动作的共享布局和视图?布局应该包含所有重复的代码(视图中的布局标记除外)。是的,我需要一个管理员视图和布局(创建定义dashbar、breadcrumbs等的html框架)以及控制器操作表单。变化的内容是控制器动作形式;我看到创建控制器动作视图的唯一原因是为了满足grails关于基于控制器动作呈现默认视图的约定,在这种情况下,这似乎是阻碍而不是帮助。