次のようなセクションドメインオブジェクトがあります:-
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()
}
}
そして、次のように見える Story ドメイン オブジェクト: -
class Story {
String title;
String story;
List link;
List substory;
List picture;
Section publishUnder
....
}
Bootsrap.groovy では、次のようにセクションを設定しました:-
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);
ストーリーはセクションで公開されます。次に、次のようなセクションサービスがあります:-
@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
}
}
GSP テンプレートは次のようになります。
<%@ 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>
そして、ホームコントローラーでこれを行います:-
def sectionService
def index =
{
List<Section> sectionList = sectionService.getSectionsForCurrentPage()
return [sectionList:sectionList];
}
インデックスページでこれを行います:
<g:render template="/layouts/headernav" />
私が得るマークアップの結果はこれです:-
<header>
</header>
私はまだgrailsを学んでいるので、おそらく明らかなことですが、ヘッダーにデータが入力されていないのはなぜですか? Section オブジェクトを含むリストがあり、リストを正しく参照していると思います。
どんな助けでも大歓迎です