我正在使用Grails 1.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")
}
}
有任何线索吗?
谢谢, 卷帘
答案 0 :(得分:2)
您是否尝试使用Config.groovy中的显式控制器属性注册导航信息,如文档中所述? (请参阅“另外,在Config.groovy中添加项目”1
一节它可能有用,但我认为它不会正确地突出显示“活动”项目。真的,这不会很好地工作,你正在做的是与基于“常规”的设置不兼容。
导航插件2.0(还没有ETA)将有一个不同的非基于控制器的机制来检测当前活动的菜单项,这在这种情况下可能会更好。
您可以随时通过电子邮件向我(插件的作者)发送电子邮件。
答案 1 :(得分:1)
从
改变def eachSubItem = { attrs, body ->
...
searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
到
def eachSubItem = { attrs, body ->
...
searchKey = flash.prevcon ?: GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
并添加到所有重定向/转发调用“flash.prevcon = controllerName”
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")
}
}
答案 2 :(得分:0)
你的gsp看起来像什么? ......即:
<nav:render group="modules" /><br /> <nav:renderSubItems group="modules" />
答案 3 :(得分:0)
解决了我的问题!!!!
我不知道这是否是最好的解决方案,但对我来说它就像一个魅力...如果我得到一个更好的解决方案,我会告诉你...
从
更改NavigationTagLib.groovydef eachSubItem = { attrs, body ->
...
searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller')
...
}
到
def eachSubItem = { attrs, body ->
...
searchKey = GrailsClassUtils.getLogicalName(controllerName, 'Controller').split(/[A-Z]/)[0]
...
}
约定是(对于此更改示例):
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:"resourcenavResource",action:"list")
}
def listEnvironments = {
redirect(controller:"resourcenavEnvironment",action:"list")
}
def listSettings = {
redirect(controller:"resourcenavSetting",action:"list")
}
}
grails-version:1.3.4 navigation-version:1.1.1
您好,
首先感谢你迄今为止的出色工作。
有问题的解决方案吗?
我刚从grails 1.2.1升级到1.3.4并遇到了这个问题,1.2.1没有那个问题(为什么到目前为止还没有调试过。)
THX
答案 4 :(得分:0)
解决此问题的最简单方法是编辑NavigationService.groovy并更改第62行:
此
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'],
],
]