1

我刚开始使用 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 可以访问该属性。

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

4

2 回答 2

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:我意识到您可能已经知道这一切是如何工作的,因为您声明文档说要使用请求对象:-/

于 2011-05-31T11:53:26.420 回答
0

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

控制器:

request.model = [myId:123]

看法:

<% request.model.with{ %>
...
<p> this is my id: ${myId} </p>
...
<% } %>
于 2012-10-16T00:23:23.757 回答