0

我的问题是,我有一个页面说并包含一个表单,该表单在我的控制器view.gsp中调用一个动作说在提交时。现在我想做的是,当详细信息已成功保存在数据库中时,我想回到那个页面()或者更确切地说是呆在那里,使用远程调用或提交。saveMyController.groovyview.gsp

我怎么做?

另外,主要是,我想在失败时附加一条文字,“您的详细信息已成功保存”或“请再次输入详细信息”。我可以这样做创建一个模板,然后从MyController? 如何?

4

1 回答 1

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例如调用)来显示具有某种格式的消息(例如单独行中的地址部分),您可以view.gsp在您希望消息显示的任何位置执行类似的操作:

<g:if test="${propertyInstance.address}">
    <g:render template="addressMessage" model="[propertyInstance: propertyInstance]" />
</g:if>
<g:else>
    Please enter details again.
</g:else>

我将其包括在内<g:if...,因为我认为如果没有地址,您不想显示此内容。

于 2012-07-17T23:25:45.313 回答