0

親ショービューの子要素のg:paginationと g: sortableColumn を取得する簡単な解決策はありますか?

リスト内の現在のドメインのページネーションとソート可能な列を行う方法については、ドキュメントでよく説明されていますが、問題に記載されている状況では動作しません。

編集:例を更新しました

現在、機能していないのはページネーションだけです。次のページのリンクをクリックすると、リストがなくなり、${childrenistSize} が 0 を出力します。

簡単な例:

親ドメイン

class Parent {

    String name

    static hasMany = [children: Children]

    static constraints = {
    }
}

子ドメイン

class Children {

    String first
    int number

    static belongsTo = [parent: Parent]

    static constraints = {
    }
}

親リスト ビュー

<g:each in="${parentList}" var="parent">
    <tr>
        <td>${parent.name}</td>
        <td><g:link controller="parent" action="show" id="${parent.id}">Show</g:link></td>
    </tr>
</g:each>

親ショー ビュー

<table>
    <thead>
        <tr>
            <g:sortableColumn property="first" title="First"/>
            <g:sortableColumn property="number" title="Number"/>
        <tr>
    </thead>
    <tbody>
        <g:each in="${childrenList}" var="child">
            <tr>
                <td>${child.first}</td>
                <td>${child.number}</td>
            </tr>
        </g:each>
    </tbody>
</table>
<g:paginate total="${childrenListSize}"/>

親コントローラー

class ParentController {

    def index() { }

    def list() {
        [parentList: Parent.list()]

    }

    def show() {
        params.max=3
        def parentInstance = Parent.get(params.id)
        def childrens = Children.createCriteria().list(params) {
          eq('parent', parentInstance)
        }
        [parentInstance : parentInstance , childrenList: childrens, childrenListSize: childrens.totalCount]
     }

}

一部の BootStrap テスト要素

    Parent parent1 = new Parent(name: "TestParent1")
    Parent parent2 = new Parent(name: "TestParent2")

    Children child1 = new Children(first: "Bob", number: "1")
    Children child2 = new Children(first: "John", number: "2")
    Children child3 = new Children(first: "Igor", number: "3")
    Children child4 = new Children(first: "Lucy", number: "4")
    Children child5 = new Children(first: "Lisa", number: "5")

    Children child6 = new Children(first: "Bob", number: "12")
    Children child7 = new Children(first: "John", number: "24")
    Children child8 = new Children(first: "Igor", number: "33")
    Children child9 = new Children(first: "Lucy", number: "42")

    parent1.addToChildren(child1).addToChildren(child2).addToChildren(child3).addToChildren(child4).addToChildren(child5)
    parent2.addToChildren(child6).addToChildren(child7).addToChildren(child8).addToChildren(child9)

    parent1.save()
    child1.save()
    child2.save()
    child3.save()
    child4.save()
    child5.save()
    parent2.save()
    child6.save()
    child7.save()
    child8.save()
    child9.save()
4

2 に答える 2

0

children.name問題は、Childrenドメインクラスに名前が付けられた列がないことです。あなたがする必要があるのは、名前の列でソートしなければならないことをコントローラーで識別することです。

親のアクションで子のリストを表示していることがわかりますが、showこのアクションでは親を並べ替えることができないため、簡単な変更になります。

def show() {
  def parentInstance = Parent.get(params.id)
  def childrens = Children.createCriteria().list(params) {
    eq('parent', parentInstance)
  }
  [parentInstance : parentInstance , childrenList: childrens, childrenListSize: childrens.totalCount]
}


<p>Parent: ${parentInstance.name}</p>
<table>
    <thead>
        <tr>
            <g:sortableColumn property="name" title="Name"/>
        <tr>
    </thead>
    <tbody>
        <g:each in="${childrenList}" var="child">
            <tr>
                <td>${child.name}</td>
            </tr>
        </g:each>
    </tbody>
</table>
<g:paginate max="1" total="${childrenListSize}"/>

property nameこれは単なる名前であり、children.nameではないため、変更したことに注意してください。また、並べ替えを機能させるために、パラメータを条件に渡します。

私はこれをテストしなかったので、どこでもタイプミスになる可能性があります。

于 2012-12-05T19:50:27.753 に答える