grails の機能に関する情報を見つけるのに苦労しています:
DomainClass.properties = params
私の特定のケースでは、次のクラスがあります。
class parameterType = {
String name
String desc
static hasMany = [codes : parameterCode]
...
}
class parameterCode = {
String code
String desc
static belongsTo = [parameterType : parameterType]
}
私の parameterType/edit.gsp には name、desc、および parameterCodes のリストを含む html テーブルがあります
最初は、「更新」アクションにスキャフォールディングされたコントローラーのバリエーションがありました。それは(間違っていることは知っていますが、初心者のコードでした)最初にすべてのparameterCodesを削除してから、それらを再関連付け(または再作成)しました。
Ajax では、次の形式でデータを送信していました。
id=1234&name=paramName&desc=paramDesc&codes[0].code=code1&codes[0].desc=codeDesc1&codes[1].code=code2&codes[1].desc=codeDesc2
そしてコントローラーにはこれがありました:
def parameterTypeInstance = ParameterType.get(params.id)
def toDelete = parameterTypeInstance.parameterCodes
parameterTypeInstance.parameterCodes = []
toDelete.each{it.delete(flush: true)}
//And this "magic" line reassociated all the properties in parameterType And Created his parameterCodes in the data base:
parameterTypeInstance.properties = params
正直なところ、それがどのように機能するかはわかりません。関連するパラメーターコードを事前に削除せずに同じことを行う方法があるかどうかを知りたかっただけです。
乾杯
**アップデート:**
これらのリンクで探していたものを見つけました:
http://www.2paths.com/2009/10/01/one-to-many-relationships-in-grails-forms/
http://omarello.com/ 2010/08/grails-one-to-many-dynamic-forms/
しかし、別のエラーがありました。
これらは LazyList と decor() について話しているので、ParameterType クラスに次の行を追加しました。
def List getExpandableCodeList() {
return LazyList.decorate(codes,FactoryUtils.instantiateFactory(ParameterCode.class))
}
しかし、コントローラーの更新でこれを行うと:
parameterTypeInstance.properties = params
次のエラーが表示されます。
groovy.lang.MissingMethodException: メソッドの署名がありません: static org.apache.commons.collections.list.LazyList.decorate() は引数の型に適用されます: (org.hibernate.collection.PersistentSet, org.apache.commons.collections. functors.InstantiateFactory) 値: [[cE - EE、cA - AA、cC - CC、cD - DD]、org.apache.commons.collections.functors.InstantiateFactory@dd768d]
データは、次のようにコントローラーで受信されています。
expandableCodeList[0].desc: AA
expandableCodeList[3].code: cE
expandableCodeList[3].id: 35073
expandableCodeList[1].id: 35076
expandableCodeList[0].code: cA
expandableCodeList[2].code: cD
expandableCodeList[ 1].desc: CC
expandableCodeList[0].id: 35080
expandableCodeList[3].desc: EE
expandableCodeList[2].id: 35075
私が間違っていることについてのヒントはありますか?データを別の形式で送信する必要がありますか?
どんな助けでも大歓迎です。ありがとう。