3

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

私が間違っていることについてのヒントはありますか?データを別の形式で送信する必要がありますか?

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

エラーがない場合は、.propertiesがgroovyによってjava.lang.Objectに追加されたメソッドである場合は、このjavaodcを参照してください。

あなたがやりたいことをする方法はたくさんあります。データバインディングに関するGrailsのドキュメントをご覧ください。

たとえば、あなたはすることができます

bindData(parameterTypeInstance, params, [exclude: parameterTypeInstance.parameterCodes])

bindDataの詳細については、こちらをご覧ください

于 2013-02-28T11:05:18.293 に答える
0

わかりました、私はこれを答えとして設定しています:

http://www.2paths.com/2009/10/01/one-to-many-relationships-in-grails-forms/

最後に、lazylist とdecorate() メソッドが、私が探していたものでした。悲しいことに、子コレクションをリストとして取得する必要があり、他の多くの問題が発生します。ただし、親オブジェクトとその子オブジェクトを使用して「単純な」方法でビューを作成する必要がある場合は、これが良い解決策です。

于 2013-03-04T16:07:40.930 に答える