2010-12-27 3 views
0

Я новичок в Граалей и пытался реализовать TreeView с помощью RichUI плагин, который показывает все родители с отдельными детьми в Parent.list.gspКак привлечь детей указанного Родитель в TreeView Colum (таблица)

XML для родители и их дети

 <parents name='Parents'> 
    <Parent id='1' name='Parent_1'> 
    <Children name='Children'> 
     <child name='Child_2' id='2' /> 
     <child name='Child_4' id='4' /> 
     <child name='Child_1' id='3' /> 
     <child name='Child_3' id='1' /> 
    </Children> 
    </Parent> 
    <Parent id='2' name='Parent_2'> 
    <Children name='Children'> 
     <child name='Child_1' id='8' /> 
     <child name='Child_2' id='7' /> 
     <child name='Child_4' id='6' /> 
     <child name='Child_3' id='5' /> 
    </Children> 
    </Parent> 
</parents> 

родитель домена класса

class Parent { 

String name 

static hasMany = [children:Child] 
}

Детский Домен Класс

class Child { 

    String name 
    Parent parent 

    static belongsTo = [parent:Parent] 

} 

Родитель Контроллер

def list = { 

    def writer = new StringWriter() 
    def xml = new MarkupBuilder(writer) 
    xml.parents(name: "Parents"){ 
     Parent.list().each { 
      Parent parentt = it 
      Parent(id:parentt.id,name:parentt.name) { 
       Children(name:'Children'){ 
        parentt.children.each { 
         Child childd = it 
         child(name:childd.name,id:childd.id) 
        } 
       } 
      } 
     } 
    } 
    if(!params.max)params.max=10 
    ["data":writer.toString(),parentInstanceList: Parent.list(params), parentInstanceTotal: Parent.count()] 
} 

Parent.list.gsp

<head> 
    <resource:treeView/> ...</head> 

<body> 
    <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="relationship" title="${message(code: 'parent.relationhsip.label', default: 'Relationship')}" /> 

        </tr> 
       </thead> 
       <tbody> 
       <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><richui:treeView xml="${data}" /></td> 

        </tr> 
       </g:each> 
       </tbody> 
      </table> 

</body> 

Проблема

В настоящее время в списке, каждая запись Родитель имеет список всех родителей и их детей в колонке отношения

Список Родитель вид Снимок link text

Вопрос

как Могу ли я зачислить всех детей только для каждого родителя вместо того, чтобы привлекать всех родителей к своим детям в каждой родительской записи?

заранее спасибо

Rehman

ответ

0

проблема здесь вы визуализации XML для всех узлов в одной операции, а затем передать его в «данные», который отображает тот же XML для каждой строки.

то, что вам нужно сделать, это передать параметр родительского идентификатора в закрытии:

/* это получает работать на петле Еогеасп в вашем GSP */

def listParentNode = { 
def parentId = params.id 
def writer = new StringWriter() 
def xml = new MarkupBuilder(writer) 
xml.parents(name: "Parents"){ 
    Parent.findAllById(parentId).each { 
     Parent parentt = it 
     Parent(id:parentt.id,name:parentt.name) { 
      Children(name:'Children'){ 
       parentt.children.each { 
        Child childd = it 
        child(name:childd.name,id:childd.id) 
       } 
      } 
     } 
    } 
} 

["data":writer.toString()] 
//or render "data" as XML // depending on what the richui tag is expecting. 
} 

другой peice является в вашем GSP, оставьте GSP файл нетронутым просто изменить эту часть:

<td><richui:treeView xml="${createLink(controller:'somecontroller',action:'listParentNode', id: parentInstance.id)}" /></td> 

somecontroller это имя контроллера, где эти действия.

+0

Спасибо за ответ. Я изменил оба parent.list.gsp и parentController, как это было предложено в вашем ответе. Но этот подход сгенерировал NullPointerException [http-8080-1] ERROR richui.TreeViewTagLib - Анализ ошибок xml java.lang.NullPointerException \t at java.io.StringReader. (StringReader.java:33) \t в groovy.util.XmlSlurper.parseText (XmlSlurper.java:215) я пытался отладить parentController и закончилась без подсказки. Есть ли у вас какие-либо идеи, как я могу получить deliever/получить правильные результаты? – Rehman

+0

Можете ли вы опубликовать недавно измененное действие контроллера и код gsp? –

+0

Я не знаю, как правильно отформатировать код в функции «Добавить комментарий», поэтому я загрузил pdf-файл, и вы можете посмотреть в документе http://pdfcast.org/pdf/source-code. если вы не в состоянии понять следующий код – Rehman