Grails 圣杯;导航插件:呈现来自不同控制器的子项?

Grails 圣杯;导航插件:呈现来自不同控制器的子项?,grails,Grails,我在使用Grails1.1和导航插件1.0.4时遇到了一个问题。我想让来自3个不同控制器的操作作为子项贡献给来自不同控制器的菜单 我看到的所有示例都使用主菜单的基本情况和指向同一控制器内操作的子项 我尝试使用一个完全分离的控制器,只是为了在那里标记导航,对子项使用重定向(见下文)。但在这种情况下,子项不会呈现 class ResourceNavController { // Navigation static navigation = [ group:'modules', order:100,

我在使用Grails1.1和导航插件1.0.4时遇到了一个问题。我想让来自3个不同控制器的操作作为子项贡献给来自不同控制器的菜单

我看到的所有示例都使用主菜单的基本情况和指向同一控制器内操作的子项

我尝试使用一个完全分离的控制器,只是为了在那里标记导航,对子项使用重定向(见下文)。但在这种情况下,子项不会呈现

class ResourceNavController {

// Navigation
static navigation = [ group:'modules', order:100, title:'Test', action:'listResources',
    subitems: [
        [group:'modules', order:10, title:'Resources', action:'listResources'],
        [group:'modules', order:20, title:'Environments', action:'listEnvironments'],
        [group:'modules', order:30, title:'Settings', action:'listSettings']
    ]
]

def listResources = {
    redirect(controller:"resource",action:"list")
}

def listEnvironments = {
    redirect(controller:"environment",action:"list")
}

def listSettings = {
    redirect(controller:"setting",action:"list")
}

}
有线索吗

谢谢,
罗洛

你的普惠制是什么样子的。。。i、 e:

<nav:render group="modules" /><br /> <nav:renderSubItems group="modules" />

您是否尝试过在Config.groovy中使用显式控制器属性注册导航信息,如文档中所述?(请参见“或者,在Config.groovy中添加项”一节)

它可能会工作,但我认为它不会正确地突出显示“活动”项。实际上,这永远不会很好地工作,您所做的与基于“约定”的设置不兼容

导航插件2.0(还没有ETA)将有一个不同的非基于控制器的机制来检测当前活动的菜单项,这在这种情况下可能会更好


你可以直接给我(插件的作者)发邮件,告诉我这个问题。

解决了我的问题

我不知道这是否是最好的解决方案,但对我来说,它就像一个魅力…如果我得到一个更好的解决方案,我会让你知道

在NavigationTagLib.groovy处从

def eachSubItem = { attrs, body ->
...
   searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
def eachSubItem = { attrs, body ->
...
   searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}

约定为(将示例更改为):

grails版本:1.3.4 导航版本:1.1.1


首先,感谢您迄今为止的出色工作

这个问题有解决办法吗

我刚从Grails1.2.1升级到1.3.4,遇到了这个问题,1.2.1没有这个问题(为什么,到目前为止还没有调试)


THX

好的,找到了另一个解决方法

并将“flash.prevcon=controllerName”添加到所有重定向/转发呼叫中


解决此问题的最简单方法是编辑NavigationService.groovy并更改第62行:

这个

进入

您可以在导航参数中设置控制器参数,如下所示:

static navigation = [
    group: 'tabs',
    order: 1,
    title: 'Title',
    subItems: [
            [action: 'list', title: 'Title 1'],
            [action: 'anotherList', title: 'Another title'],
            [controller: 'someOtherController', action: 'list', title: 'Last title'],
    ],
]

你有没有这样做过?我也有同样的想法。嗨,布拉德,答案是否定的。我实际上已经不再使用这个插件了。希望我能早点看到这个问题。我们尝试过使用这个插件,最后也实现了我们自己的导航。
def eachSubItem = { attrs, body ->
...
   searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
def eachSubItem = { attrs, body ->
...
   searchKey = flash.prevcon ?: GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
class ResourceNavController {

// Navigation
static navigation = [ group:'modules', order:100, title:'Test', action:'listResources',
        subitems: [
                [group:'modules', order:10, title:'Resources', action:'listResources'],
                [group:'modules', order:20, title:'Environments', action:'listEnvironments'],
                [group:'modules', order:30, title:'Settings', action:'listSettings']
        ]
]

def listResources = {
        flash.prevcon = controllerName
        redirect(controller:"resource",action:"list")
}

def listEnvironments = {
        flash.prevcon = controllerName
        redirect(controller:"environment",action:"list")
}

def listSettings = {
        flash.prevcon = controllerName
        redirect(controller:"setting",action:"list")
}

}
result.controller = p.controller
result.controller = subitem.controller ? subitem.controller : p.controller
static navigation = [
    group: 'tabs',
    order: 1,
    title: 'Title',
    subItems: [
            [action: 'list', title: 'Title 1'],
            [action: 'anotherList', title: 'Another title'],
            [controller: 'someOtherController', action: 'list', title: 'Last title'],
    ],
]