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

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方式"返回函数的最后一个值.


Mar*_*cel 6

您需要通过控制器操作中的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文档.