Grails将命令对象添加到版本会导致params的id和版本不被绑定

时间:2013-07-20 20:27:51

标签: grails command-objects

如果我在这里遗漏了一些非常明显的事情,我很抱歉,但是我一直在解决这个问题。

我有一个命令对象:

class MyCommand {
    Long id
    String value
}

我在我的控制器中绑定了这个:

public update(MyCommand myCmd) {


}

在这种情况下,一切都很好。现在我正在尝试添加版本字段,该字段在请求参数中传递给命令对象:

class MyCommand {
    Long id
    Long version
    String value
}

现在,当绑定发生时,id和version始终为null,即使它们存在于params对象中。

我怀疑对于与grails如何处理乐观锁定有关的id / version属性可能有一些特殊处理(因为这最终是我这样做的原因)但是问题出现在命令对象中,与任何域对象无关

我很困惑为什么这不起作用。在命令对象上存在版本时是否存在某些特殊情况?

1 个答案:

答案 0 :(得分:8)

似乎这是根据Jeff Brown jira

设计的
  

数据绑定显式避免绑定id或版本[if]两者   存在并按设计完成。这是一种抵御潜力的盾牌   与域相关的与数据绑定相关的安全问题   类。对命令对象的简单解决方法是命名   具有“idValue”和“versionValue”或类似内容的属性   “id”和“version”以外的任何内容。