Gaelyk - 如何在Controller和View之间传递模型对象

时间:2011-05-31 11:26:10

标签: google-app-engine groovy gaelyk

我刚刚开始使用Gaelyk。

我期待它的行为像Spring MVC;我在controller.groovy中创建了我的模型对象,在.gtpl中创建了模型对象的格式。

在控制器中我这样做

def model = new MyModel()
model.setMyId(2)

在.gtpl中我这样做

<h1>Test ${model.myId}</h1>
<p>
    Model object is ${model}
</p>

然而,当我运行这个时,我得到一个 MissingPropertyException

groovy.lang.MissingPropertyException: No such property: model for class: SimpleTemplateScript1

在教程示例中,模型对象被强制转换为 javax.servlet.http.HttpServletRequest 的属性,可供.gtpl访问。

这真的是在控制器和模板之间传递数据的唯一方法吗? 如果我能避免污染请求(或响应)对象,我会感觉更清洁。

2 个答案:

答案 0 :(得分:4)

我认为您唯一的选择是请求对象(如您所说)。您可以将变量设置为请求对象,如:

def model = new MyModel()
model.setMyId(2)
request.model = model

forward 'view.gtpl'

然后,在view.gtpl你做:

<h1>Test ${request.model.myId}</h1>
<p>
    Model object is ${request.model}
</p>

由于request是短暂的,我不会说它污染了Request对象,更多地利用它; - )

比使用(例如)会话对象

更好

PS:我知道你可能已经知道这一切是如何工作的,因为你声明文档说要使用请求对象: - /

答案 1 :(得分:0)

添加到tim_yates响应中,您可以用以下内容包装整个gtpl:

<强>控制器:

request.model = [myId:123]

查看:

<% request.model.with{ %>
...
<p> this is my id: ${myId} </p>
...
<% } %>