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 堆栈中不可见