0

私はgrailsの初心者で、次のクエリがあります。

問題のドメイン:

  • 親ドメイン クラスにはブール型の一時プロパティ「isValid」があります。

  • 子ドメインにはブール プロパティ「isValid」があります。

  • Parent/list.gsp を使用すると、ユーザーは、ParentController の更新関数を介して、ParentInstanceList の親インスタンスの isValid プロパティを変更できます。これをさらに使用して、各親の子のプロパティ「isValid」を設定できます。

親ドメイン クラス

class Parent {

String name
boolean isValid = false

static hasMany = [children:Child]
static transients =['isValid']

}

子ドメイン クラス

class Child {

String name
boolean isValid
Parent parent

static belongsTo = [parent:Parent]

}

親/list.gsp

    <g:form method="post" action="update" >
    <div class="list">
        <table>
            <thead>
                <tr>

                    <g:sortableColumn property="id" title="${message(code: 'parent.id.label', default: 'Id')}" />

                    <g:sortableColumn property="name" title="${message(code: 'parent.name.label', default: 'Name')}" />
                     <g:sortableColumn property="isValid" title="${message(code: 'parent.isvalid.label', default: 'isValid?')}" />

                </tr>
            </thead>
            <tbody>
            <g:hiddenField name="parentInstanceList" value="${parentInstanceList }"/>
            <g:each in="${parentInstanceList}" status="i" var="parentInstance">

                <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">

                    <td><g:link action="show" id="${parentInstance.id}">${fieldValue(bean: parentInstance, field: "id")}</g:link></td>

                    <td>${fieldValue(bean: parentInstance, field: "name")}</td>
                    <td>
                    <g:checkBox name="isValid" value="${parentInstance?.isValid }"/>
                    </td>

                </tr>
            </g:each>
            </tbody>
        </table>
    </div>
    <div class="paginateButtons">
        <g:paginate total="${parentInstanceTotal}" />
    </div>

    <div class="buttons">
        <span class="button">
            <g:actionSubmit class="update" action="update" value="${message(code: 'default.button.update.label', default: 'update')}" />
        </span> 
    </div>

親/list.gsp スナップショット: http://img156.imageshack.us/i/parentlistview.png/

クエリ: どのparentInstanceのプロパティ「isValid」がチェックされていない/チェックされていないかを追跡して、親の子プロパティ「isvalid」を簡単に設定できるようにするにはどうすればよいですか。

def parentInstanceList  = params.parentInstanceList
    parentInstanceList.each {
        Parent parent = it
        parent.children.each{
            Child child = it
            child.isValid=parent.isValid
        }
    }

これまでのところ、params.parentInstanceList を介してすべての親の ID を取得できますが、各parentInstance の変更されたプロパティをバインドする方法がわかりません。単一のparentInstanceがある場合、簡単に実行できます

Parent parentInstance = Parent.get(params.id)
 parentInstance.properties = params

前もって感謝します

レーマン

4

1 に答える 1

0

各行に特定の名前のチェックボックスをレンダリングすることを好みます。

<g:checkBox
        name="Parent_${parentInstance.id}"
        value="${parentInstance.isValid ? 'on' : 'off'}" />

チェックされたすべてのチェックボックスを収集します。

def update = {
    Collection<Parent> checked = params.collect{ Map.Entry that ->
        that.value != "on" ? null : getParentForCheckbox(that.key)
    }.findAll{ it != null }

    ... // and then assign 'isValid' by hand
}

配列プロパティを使用して、チェックボックスに のような名前を付けてから、プロパティを使用してオブジェクトにparentInstanceList[0]割り当てることができますが、エラーが発生しやすくなります。HTML でレンダリングした がプロパティを割り当てたものと同じになるという保証はありません。properties = paramsparentInstanceListparentInstanceList

于 2010-12-28T15:35:59.583 に答える