【发布时间】:2014-12-19 10:31:06
【问题描述】:
我面临以下问题:我有要编辑的实体。所以我导航到显示页面,然后编辑页面。假设我的实体的 id 等于 2。然后我们有以下网址: app/entity/show/2 -> app/entity/edit/2。然后我在编辑页面上更新我的实体并提交表单并转到 app/entity/update。 在我的控制器中,我有以下 update() 方法的代码:
def update(Entity entity) {
//some code
}
我调试更新方法并看到实体包含 id = 2 这意味着 id 包含在参数中(可能是因为以前的 url 等于 app/entity/edit/2 >)。事实上,如果要检查调试,它在参数中。但我想在提交表单之前从参数中排除 id,因为 Grails 做了一些不适合我的事情:如果 id 在参数中,grails 会获取实体及其关联来自数据库。假设我们有 一对多 关联 1:entity-N:otherEntity,在我的编辑页面上可以删除一些 otherEntities ,但由于 entity 的 id 包含在参数中,因此 grails 会获取那些 otherEntities,即使它们在编辑页面上已被删除。那么是否可以在表单提交之前从参数中排除实体的 id ? 谢谢!
UPD
在我的edit.gsp中有以下代码:
<g:form url="[resource: empInstance, action: 'update']" method="PUT">
我改成
<g:form controller="emp" action="update" method="PUT">
现在 id 不包含在参数中,但这段代码:
def update(Entity entity) {
//some code
}
给出一个空实体
【问题讨论】:
-
请出示您的代码,与提交相关的部分
-
可以在执行动作前通过拦截器grails.org/doc/latest/ref/Controllers/beforeInterceptor.html做一些处理。
-
我没有得到这个:“在我的编辑页面上,可以删除一些其他实体”,在第二种情况下,您确实得到了空对象,因为您省略了资源:empInstance,其中包含将 id 字段附加到网址。
标签: grails grails-orm grails-controller