つまり、たとえば、抽象Pet
クラスと、その 3 つの具体的な実装があります。具象クラスと同様に、これらの人は共通のフィールドを共有し、独自のフィールドも持っています。たとえば、すべてが を持っていますが、鳥だけが を持っています。つまり、GSP が異なり、更新方法も異なります。Cat
Dog
Bird
Legs
Wings
秘訣は、1 回のアクションで不確定数のインスタンスをインスタンス化し、検証し、永続化できる必要があるということです。簡単な実装は、基本的に次のとおりです。
create.gsp
Cat Hair Color: <g:textField name="catInstance.hairColor"/>
Dog Hair Color: <g:textField name="dogInstance.hairColor"/>
Bird Feather Color: <g:textField name="birdInstance.featherColor"/>
PetCommand.groovy
class PetCommand {
Cat catInstance
Dog dogInstance
Bird birdInstance
}
PetController.groovy
def save(PetCommand cmd) {
def catInstance = cmd.catInstance
def dogInstance = cmd.dogInstance
def birdInstance = cmd.birdInstance
/* do stuff */
}
もちろん、実際のアプリケーションでは、これはかなり厄介になり、抽象クラスを使用する目的を完全に無効にします。
Pet
複数のインスタンスを一挙にバインドし、それらをループして更新するパラメータを渡すなどの方法はありますか? わかりません、この全体が非常に混乱しています。
コマンド オブジェクトは厳密に必要というわけではありませんが、Grails コントローラーの厄介な冗長性の多くを修正します。