我刚刚开始使用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访问。
这真的是在控制器和模板之间传递数据的唯一方法吗? 如果我能避免污染请求(或响应)对象,我会感觉更清洁。
答案 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>
...
<% } %>