在一个Grails视图中显示父/子列表

时间:2013-08-08 17:03:21

标签: grails

我试图使用grails 2.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完成。

控制器和视图代码应该是什么样的?

2 个答案:

答案 0 :(得分:0)

GSP: 你需要包含jquery

      <g:each in="${ parentlist}" var="FoundParent">

                <button id=whatever 
onclick="<g:remoteFunction controller="AppstackController"  
        action="getChildren" update="myBOX"  
        id="${FoundParent.id}"  params="${[name:FoundParent.name,param2:'something']}"/>">
        FoundParent.name</button>
     </g:each>
                 <div id=myBox>
                   <g:each in="${childList}" var="FoundChild">
                            ${FoundChild.name}
               </g:each>
                 </div>

答案 1 :(得分: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}给你一套孩子。您可以使用“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;}