iba*_*alf 7 grails controller view
我对grails很新.我只是注意到控制器中的变量在视图中不可见.我只能在将其分配给范围时获取变量值.这是标准的Grails方式还是我做错了.另外,params范围是正确使用的还是我应该使用session,servletContext?
在控制器中
String uploadLocation = grailsApplication.config.uploads.location.toString()
params.put "upLoc", uploadLocation
Run Code Online (Sandbox Code Playgroud)
在视图中
<td> <input type="text" value="${params.get('uploc')}/${fileResourceInstance.decodeURL()}"></input></td>
Run Code Online (Sandbox Code Playgroud)
我对Ruby on Rails非常熟悉,在RoR中处理的方式非常不同.谢谢.
Hoà*_*ong 11
你可以像Maricel所说的那样做,但还有另一种方式(我认为这是一种默认方式):返回你想要传递给动作函数视图的值.例如
def test = "abc"
def num = 3
return [testInView: test, numInView: num]
Run Code Online (Sandbox Code Playgroud)
然后在视图中您可以访问$ {testInView},$ {numInView}
另一种略有不同的方式:你可以忽略"return"关键字,它是"groovy方式"返回函数的最后一个值.
您需要通过控制器操作中的render方法将变量作为模型的一部分传递,如下所示:
String uploadLocation = grailsApplication.config.uploads.location
render(model: [uploadLocation: uploadLocation])
Run Code Online (Sandbox Code Playgroud)
然后在视图中你可以做到:
<td>
<input type="text" value="${uploadLocation}/${fileResourceInstance.decodeURL()}"/>
</td>
Run Code Online (Sandbox Code Playgroud)
另一方面,如果这是在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>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看Grails文档.