0

grails 2.2.1 を使用して、1 つのビューに 1 対多の関係を表示しようとしています。

基本的に、1 つのビューを使用して 2 つのリスト (1 つの親リストと 1 つの子リスト) を表示したいと考えています。さらに、親リストで選択されているレコードに基づいて、子リストに適切な子レコードを表示するためのコントローラーへの呼び出しを作成したいと考えています。ドメインは次のようになります...

class Parent{
    string name
    string attribute

    static hasMany = [children : Child]

}


class Child{
    string name
    string childattribute

    static belongsTo = [parent: Parent]

}

親コントローラーは...

class AppstackController {

static scaffold = Appstack

def index ={
   def parent = Parent.list()
   def childList= parent?.child
   render(view: "list", model:[parentlist: Parent.list(), childList: childList])
}

def getChildren = {
    def parent= Appstack.get(params.id)
    def childList= parent?.child
    render (view: "list", model:[childList: childList])
}


}

getChildren アクションを呼び出し、親リストの行をクリックしてビューの子リストを更新できるようにしたいと考えています。これは remoteLink または remoteFunction で実現できると思います。

これを実現するには、コントローラーとビューのコードはどのようにすべきでしょうか?

4

2 に答える 2

0

GET http リクエストを使用することをお勧めします。とにかく、後でAJAXリクエストを追加できます。AJAX の使用方法については、Grails のドキュメントを参照してください。

class ParentController {

    def index(){ redirect action: 'list' }

    def list(){
        [parents: Parent.list()]
    }

    def show(long id){
       def parent = Parent.get(id)
       if (!parent) { redirect: action:'list'; return }

       //prepare model
       model=[:]
       model.parents = Parent.list()
       model.parent = parent
       render view:'list', model:model
    }

}

GSP の ${parent?.children} は子の Set を提供します。「g:each」タグを使用できます。

GSP

<ul>
   <g:each in="${parents}" var="p">
   <li class="selectable ${ p==parent?'selected': ''}">
      <g:link action="show" id="${p.id}">
          ${p.name}
      </g:link>
   </li>
   </g:each>
</ul>

<ul>
   <g:each in="${parent?.children}" var="child">
   <li>
      ${child.name}
   </li>
   </g:each>
</ul>

CSS

li.selectable{}
li.selectable:HOVER{ border: 1px solid gray;}
li.selected{ border: 1px solid gray; background-color: silver;}
于 2013-08-09T05:59:48.203 に答える