【问题标题】:grails delete id param before form submitgrails在表单提交之前删除id参数
【发布时间】: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 ,但由于 entityid 包含在参数中,因此 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


【解决方案1】:

如果省略 id,你将如何更新实例?您将拥有的只是其他属性 - 您打算将它们存储在哪里?

Grails 正在检索实例,因为您通过将Entity entity 作为参数添加到控制器操作来告诉它。当您这样做时,数据绑定代码会查找id 参数,如果找到,将使用请求类来获取实例。如果您不希望它加载实例,请删除该参数并直接使用 params

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多