【问题标题】:UrlMapping :: View attribute in matched block ignoredUrlMapping :: 匹配块中的视图属性被忽略
【发布时间】:2011-08-03 01:56:50
【问题描述】:

给定 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 是这样做的地方......

【问题讨论】:

    标签: grails view url-mapping


    【解决方案1】:

    看起来你正在尝试做一些与你写的完全不同的事情。

    您已经在基本 URL 映射中映射了 action,并且会根据 controller 自动选择视图,因此对于那些没有控制器的视图,您需要 define different mappings,但另一个默认操作为foo 的项目映射。不过,控制器的默认操作是 index,因此通常无需指定控制器即可提供默认操作。

    我认为您通常误解了 MVC 框架的工作原理。控制器不应该渲染任何东西,并且视图应该特定于控制器/动作。如果多个控制器渲染完全相同的视图,我敢打赌要么控制器渲染 HTML,要么视图过于复杂。

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

    【讨论】:

    • 谢谢, foo 操作什么都不做,只是验证 urlmapping 块是否实际匹配。是的,我正在尝试做的事情违背了 MVC 粒度。由于 /admin 下的每个控制器都将使用完全相同的视图,因此创建重复视图以满足控制器到 action.gsp 的约定似乎毫无意义。管理屏幕都完全相同(仪表板、面包屑、自动完成搜索等),唯一不同的内容是表单本身,我非常乐意在管理布局中使用 +管理员视图。也许这是一个错误的方法,只是从视图开始。
    • 是的,这就是布局的全部用途。见最后一个链接。
    • 当然,布局就是为了这个,但是对于每个控制器,我仍然需要定义一个 view-action.gsp(或每个控制器操作渲染管理模板),考虑到这一点,这并不是非常干燥,同样,唯一变化的内容是控制器表单内容。
    • 我很困惑。动作到动作的唯一区别是表单内容,所以您想要一个包含所有表单的大视图,而不是每个动作的共享布局和视图?布局应该包含所有重复的代码(除了视图中的布局标签)。
    • 是的,我想要一个管理视图和布局(创建定义仪表板、面包屑等的 html 框架),带有控制器操作表单 .变化的内容是controller-action形式;我看到创建控制器动作视图的唯一原因是满足基于控制器动作呈现默认视图的 grails 约定,在这种情况下,这似乎比帮助更多。
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多