【问题标题】:Data driven navigation in grails and gspgrails 和 gsp 中的数据驱动导航
【发布时间】:2013-03-11 19:35:22
【问题描述】:

我有一个 Section 域对象,它看起来像这样:-

    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>

在 Home 控制器中我这样做:-

def sectionService

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

在索引页面中我这样做:

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

我得到的标记结果是这样的:-

<header>
</header>

我还在学习 grails,所以这可能很明显,但为什么没有填充标题?有一个包含 Section 对象的列表,我认为我正确地引用了该列表。

任何帮助将不胜感激

【问题讨论】:

    标签: grails grails-2.0


    【解决方案1】:

    我错了很多。然而,通过它并开始运行帮助我了解了更多关于 groovy 和 grails 的知识。感谢您格式化我的问题凯利。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2011-01-22
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多