0

次のようなセクションドメインオブジェクトがあります:-

    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 オブジェクトを含むリストがあり、リストを正しく参照していると思います。

どんな助けでも大歓迎です

4

1 に答える 1

0

私はそれをたくさん間違っていました。しかし、それを乗り越えて走ることは、GroovyとGrailsについてもっと学ぶのに役立ちました。ケリーの質問をフォーマットしていただきありがとうございます。

于 2013-03-11T11:35:22.063 に答える