【问题标题】:I can't get the grails controller "render" method to work with an explicit template我无法让 grails 控制器“渲染”方法使用显式模板
【发布时间】:2010-11-16 14:01:15
【问题描述】:

我刚刚开始使用 grails,但遇到了问题。

我有项目主页的“控制器”和“视图”(主页没有模型)

我将视图命名为“index.gsp”,并将其放在目录views/home中

但是,无论我做什么,grails 都会尝试读取页面“home.gsp”(然后是 home.jsp),尽管我已经在渲染调用中明确指定了带有“模板”属性的索引。

class HomeController {
    String someparameter = "xyzzy"
    def index = { 
        render(view:"home", template:"index")  // I also tried "index.gsp" and "home/index.gsp"
    }
}

我想我可能错误地使用了“模板”属性,因为我只在示例中看到它用于无视图模板渲染。但是文档没有给出这样的限制。

有没有办法明确指定模板的名称?我只是屈服并将其重命名为“home.gsp”,但我想了解发生了什么问题。

(此应用程序的主页没有“模型”。Grails 将使用具有模型的控制器。在此示例中,您可以通过 ${someparameter} 访问 gsp 模板中的“someparameter”。)

【问题讨论】:

    标签: grails groovy templates gsp


    【解决方案1】:

    我想你可能误解了Grails template 是什么。将模板视为可重用的片段。模板是一个 GSP,它以 _menu.gsp 之类的下划线开头,您通常会在另一个 GSP 中使用 <g:render template="menu"/> 之类的标签来呈现它。

    同时渲染视图和模板是没有意义的。在这一点上它们是互斥的。

    您是否希望实现布局?如果是这样,see the docs 或 the grails.org explaination.

    基本上,您的视图在您的视图的<head/> 标记中会有一个<meta name="layout" content="main"> 标记——这表明该视图将与位于grails-app/views/layouts/main.gsp 中的main 布局网格在一起

    【讨论】:

    • 谢谢!当我重新阅读“grails的权威指南”时,我自己意识到了这一点事实证明,如果我想在视图名称home下有一个名为“index.gsp”的“.gsp”,它会找到“home”目录自动基于控制器的名称,我所要做的就是说渲染(视图:“索引”)视图实际上并不是指“视图”,它指的是视图目录下名为的.gsp文件与控制器相同。有时,这种“基于约定”的编程可能会使习惯于其他术语的菜鸟搞砸。
    • 就此而言,您甚至不必显式渲染视图,因为如果您不指定,Grails 将查找与操作同名的视图。
    猜你喜欢
    • 2012-03-27
    • 2017-10-09
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2010-11-30
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多