我的问题是,我有一个页面说view.gsp
并且包含一个表单,该表单在我的控制器中调用操作save
,在提交时说MyController.groovy
。现在我想要做的是,当细节成功保存在数据库中时,我想回到那个页面(view.gsp
)或者更确切地说,使用远程调用或提交。
我该怎么做?
另外,主要是,我想附加一条文字,说明“您的详细信息已成功保存”或“请再次输入详细信息”。我可以创建模板,然后从MyController
渲染它吗?怎么样?
答案 0 :(得分:0)
所以你要使用相同的表单和动作创建(保存)和编辑(更新)?
根据保存是否成功,您的save
操作在某个时间点将redirect
或render
特定视图。因为你总是想要渲染相同的视图而不管它是否保存,我会这样做:
def save = {
def propertyInstance
//you need to do this since you are both saving and updating in the same action
if(params.id) {
propertyInstance = Property.get(params.id)
propertyInstance.properties = params
} else {
propertyInstance = new Property(params)
}
if (propertyInstance.save(flush: true)) {
flash.message="Property ${propertyInstance?.id} : ${propertyInstance?.address} has been added successfully"
}
else {
flash.message = "Please enter details again"
}
render(view: "view", model: [propertyInstance: propertyInstance])
}
然后在您的view.gsp
中,您可以显示您在flash.message
中设置的内容:
<g:if test="${flash.message}">
<div class="message">${flash.message}</div>
</g:if>
修改强>
如果您想使用模板(例如,名为_addressMessage.gsp
)来显示带有某种格式的消息(例如,如果地址位于不同的行上,则可以在{{1}中执行此类操作无论您希望消息显示在哪里:
view.gsp
我在其中包含了<g:if test="${propertyInstance.address}">
<g:render template="addressMessage" model="[propertyInstance: propertyInstance]" />
</g:if>
<g:else>
Please enter details again.
</g:else>
,因为我认为如果没有地址,您不想显示此内容。