2013-02-13 4 views
0

J'ai un article objet de domaine qui ressemble à ceci: -guidée par les données de navigation dans Grails et gsp

class Section { 
     String name; 
     Section parent; 
     int level = 0; 
     Boolean isRoot = false; 
     static hasMany = [children:Section] 
     static mappedBy = [children:'parent'] 
     .... 
     def Boolean isLeaf(){ 
      return children.isEmpty() 
     } 
    } 

Et un objet de domaine de l'histoire que regarder ceci: -

class Story { 
    String title; 
    String story; 
    List link; 
    List substory; 
    List picture; 
    Section publishUnder 
    .... 
} 

En Bootsrap.groovy J'ai mis les sections comme ceci: -

def Section Home = new Section(name:"Home").save(flush: true); 
    def Section News = new Section(name:"News").save(flush: true); 
     def Section News_Crime = new Section(name:"Crime",parent:News).save(flush: true); 
     def Section News_Politics = new Section(name:"Politics",parent:News).save(flush: true); 
      def Section News_Politics_Labour = new Section(name:"Labour",parent:News_Politics).save(flush: true); 
      def Section News_Politics_Tories = new Section(name:"Tories",parent:News_Politics).save(flush: true); 
      def Section News_Politics_LibDems = new Section(name:"LibDems",parent:News_Politics).save(flush: true); 

Les histoires sont publiées sous les articles. J'ai alors un service de section qui ressemble à ceci: -

@Transactional(readOnly = true) 
Section[] getSectionsForCurrentPage(Long sectionID = 0) 
    { 
    def rootLevel = 0 
    def Section selectedSection = Section.get(sectionID)?:Section.findByName("Home") 
    def Section[] sectionList = [] 
    (sectionList as List).add(0,[sectionInstanceList: Section.findWhere(level:rootLevel)]) 
    if(!selectedSection.isLeaf()){ 
      sectionList[1] = [sectionInstanceList:Section.findWhere(level:1,parent:selectedSection)]//just for testing needs to be iterative 
    } 

} 

Le modèle SPG ressemble à ceci: -

<%@ page import="com.keane.reg.content.Section" %> 

<header> 
<g:each in = "${sectionList}" status="i" var = "sectionInstanceList"> 
    <div id="navLevel_+${i}}" class="headerNav">   
    <ul class="navLevel_+${i}}">    
     <g:each in="${sectionInstanceList}" status="j" var="sectionInstance">     
     <li><g:link action="show" id="${sectionInstance.id}">${fieldValue(bean: sectionInstance, field: "name")} </g:link></li>      
     </g:each>    
    </ul>   
    </div> 
</g:each> 
</header> 

Et dans le contrôleur Home Je fais ceci: -

def sectionService 

    def index = 
    { 
    List<Section> sectionList = sectionService.getSectionsForCurrentPage() 
    return [sectionList:sectionList]; 
    } 

Dans la page d'index je fais ceci:

<g:render template="/layouts/headernav" /> 

Le résultat Markup je reçois est la suivante: -

<header> 
</header> 

Je suis encore à apprendre Grails Il est donc sans doute quelque chose d'évident, mais pourquoi est l'en-tête pas remplie? Il y a une liste contenant des objets Section et je pense que je fais référence à la liste correctement.

Toute aide serait très appréciée

Répondre

0

Je l'avais beaucoup mal. Cependant, travailler à travers et courir m'a aidé à en apprendre davantage sur groovy et grails. Merci pour le formatage de ma question Kelly.