3

ここで本当に明らかな何かが欠けている場合は申し訳ありませんが、この問題で髪を引っ張っています.

コマンドオブジェクトがあります:

class MyCommand {
    Long id
    String value
}

コントローラーでこれにバインドします:

public update(MyCommand myCmd) {


}

このシナリオでは、すべて問題ありません。今、リクエストパラメーターでコマンドオブジェクトに渡されるバージョンフィールドを追加しようとしています:

class MyCommand {
    Long id
    Long version
    String value
}

ただし、バインドが発生すると、id とバージョンは、params オブジェクトに存在していても、常に null になります。

grails がオプティミスティック ロックを処理する方法に関連する id / version 属性の特別な処理があるのではないかと疑っていましたが (これが最終的に私がこれを行っている理由です)、ドメイン オブジェクトとは無関係にコマンド オブジェクトに問題が存在します。

なぜこれが機能しないのか、私は困惑しています。コマンドオブジェクトにバージョンが存在する特別なケースはありますか?

4

1 に答える 1

8

これは、Jeff Brown jiraによる設計によるものと思われます

データ バインディングは、id またはバージョンのバインディングを明示的に回避します [if] 両方が存在し、これを設計により行います。これは、ドメイン クラスに関連するデータ バインディングに関連する潜在的なセキュリティの問題に対するシールドです。コマンド オブジェクトの簡単な回避策は、プロパティに「idValue」や「versionValue」などの名前を付けたり、「id」や「version」以外の名前を付けたりすることです。

于 2013-07-20T20:52:51.537 に答える