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