Grails 控制器变量在视图中不可见

Posted

技术标签:

【中文标题】Grails 控制器变量在视图中不可见【英文标题】:Grails controller variables not visible in the views 【发布时间】:2011-04-08 22:50:13 【问题描述】:

我对 grails 很陌生。我刚刚注意到控制器中的变量在视图中不可见。只有将变量值分配给范围时,我才能获取它。这是标准的 Grails 方式还是我做错了。另外,params 范围是正确的使用还是我应该使用会话 servletContext?

在控制器中

String uploadLocation = grailsApplication.config.uploads.location.toString()
params.put "upLoc", uploadLocation

在视图中

<td> <input type="text" value="$params.get('uploc')/$fileResourceInstance.decodeURL()"></input></td>

我对 Ruby on Rails 非常熟悉,并且在 RoR 中对此的处理方式非常不同。谢谢。

【问题讨论】:

【参考方案1】:

你可以像 Maricel 说的那样做,但还有另一种方法(我认为这是一种默认方法):在 action 函数中返回你想要传递给视图的值。例如

def test = "abc"
def num = 3

return [testInView: test, numInView: num]

然后在视图中你可以访问 $testInView, $numInView

另一种稍微不同的方式:你可以忽略“return”关键字,它是“常规方式”返回函数的最后一个值。

【讨论】:

【参考方案2】:

您需要通过控制器操作中的渲染方法将变量作为模型的一部分传递,如下所示:

String uploadLocation = grailsApplication.config.uploads.location    
render(model: [uploadLocation: uploadLocation])

然后在视图中你可以这样做:

<td> 
   <input type="text" value="$uploadLocation/$fileResourceInstance.decodeURL()"/>
</td>

另一方面,如果这是在 Config.groovy 中定义的值,您也可以在 gsp 中执行此操作:

<%@ page import="org.codehaus.groovy.grails.commons.ConfigurationHolder as CH" %>

<td> 
   <input type="text" value="$CH.config.uploads.location/$fileResourceInstance.decodeURL()"/>
</td>

更多信息请查看Grails docs。

【讨论】:

【参考方案3】:

一个有趣的旁注。如果您没有从您的操作中返回任何内容,那么操作范围内的所有变量都将在您的视图中可用,如下所述:http://www.grails.org/Controllers+-+Models+and+Views

【讨论】:

我没有在您链接的页面上看到这一点,而且它只是动作范围变量还是类范围的变量?

以上是关于Grails 控制器变量在视图中不可见的主要内容,如果未能解决你的问题,请参考以下文章

导入的框架在视图控制器中不可见

UIViewcontroller 在 uinavigationcontroller 堆栈中不可见

Grails 不会将变量传递给嵌套模板

MapKit 中的中心位置在 UiLabel 中不可见

ViewController 控件不可见,但存在于文档指南中

Grails - 控制器和视图之间的通信