【问题标题】:template not found in grails application在 Grails 应用程序中找不到模板
【发布时间】:2013-08-06 15:01:53
【问题描述】:

我刚刚从 2.1.2 升级到 grails 2.2.4。在我的本地一切正常,但是,当我将 WAR 打包到测试环境中时,我看到了一个奇怪的错误。在使用模板的表单上出现错误:

找不到名称 [form] 和路径 [/base/_form.gsp] 的模板。

但是,此模板(使用来自 create.gsp 的模板)不在基本文件夹下。它位于名为 color(视图下)的文件夹下,create.gsp_form.gsp 都驻留于此

这是我在 create.gsp 中使用的标签:

<g:render template="form" bean="${mybean}"/>

似乎 grails 假设模板位于 base 中,但它实际上位于 color 中。

【问题讨论】:

  • 您确定 /base 下的视图中没有该标签?
  • 不,我在 /base 下没有
  • views 下我什至没有名为 /base 的文件夹

标签: grails tags gsp


【解决方案1】:

您收到此错误,

template not found for name [form] and path [/base/_form.gsp]

因为 Grails 正在寻找_form.gsp,按照惯例,该路径相对于与呈现父 gsp 的控制器同名的文件夹。如果您未在渲染标记中提供绝对路径(从 views 文件夹开始),则总是会出现这种情况。

您的 _form.gsp 页面在哪里?以下是一些示例路径

grails-app/views/_form.gsp           
    -> <g:render template="/form" ..

grails-app/views/base/_form.gsp      
    -> <g:render template="/base/form" ... 
 or -> <g:render template="form" ..  //if calling from baseController 

因此,如果 _form.gsp 存在于 color 中并且颜色位于 grails-app/views/color 中,则您的渲染标签中需要以下路径:

<g:render template="/color/form"

【讨论】:

  • 这似乎解决了它,但为什么会这样?它不会对我的本地环境造成任何问题。现在突然之间,我必须在我的应用程序中进行这些更改。例如:我什至必须将&lt;g:form action="save"... 更改为&lt;g:form action="/color/save
  • Grails 默认值通常是 based on convention 。例如 SomeController 将在 /views/some/ 中具有相应的 gsp,并且 gsp 中的任何操作都将与 /views/some 相关并提交给 SomeController,除非您明确定义其他东西。因此,在您的 g:form 中,除了 action 之外,您还应该指定 controller 属性。
  • 看起来你可能已经移动了一些 gsp 文件,或者在某个时间点重命名了一些域/控制器,如果它在早期工作的话。如果是这种情况,那么您可能有很多断开的链接
  • 我使用的是默认约定。我有一个具有保存操作的 ColorController。在/views/color 我有一个create.gsp,它有一个表单标签
猜你喜欢
  • 2023-03-07
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2013-01-28
相关资源
最近更新 更多