如何使模板附加到控制器的特定视图

时间:2012-07-17 22:44:32

标签: grails

我的问题是,我有一个页面说view.gsp并且包含一个表单,该表单在我的控制器中调用操作save,在提交时说MyController.groovy。现在我想要做的是,当细节成功保存在数据库中时,我想回到那个页面(view.gsp)或者更确切地说,使用远程调用或提交。

我该怎么做?

另外,主要是,我想附加一条文字,说明“您的详细信息已成功保存”或“请再次输入详细信息”。我可以创建模板,然后从MyController渲染它吗?怎么样?

1 个答案:

答案 0 :(得分:0)

所以你要使用相同的表单和动作创建(保存)和编辑(更新)?

根据保存是否成功,您的save操作在某个时间点将redirectrender特定视图。因为你总是想要渲染相同的视图而不管它是否保存,我会这样做:

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> ,因为我认为如果没有地址,您不想显示此内容。