2009-04-25 58 views
5

我正在使用Grails 1.1和导航插件1.0.4,只是遇到了一个问题。我希望来自3个不同控制器的动作作为子项目从不同控制器的菜单中提供。Grails&Navigation Plugin:从不同的控制器渲染子项目?

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

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

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

你有没有得到这个工作?我被困在同样的事情上。 – 2009-09-28 20:13:08

+1

嗨Brad 答案是否定的。而且我实际上不再使用插件。 – 2009-09-30 17:30:50

回答

0

什么是您的GSP样子? ...即:

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

您是否尝试过与注册明确控制器的导航信息中的Config.groovy属性作为文档解释呢? (请参阅“或者,在Config.groovy中添加项目”一节1

它可能会工作,但我认为它不会正确地突出显示“活动”项目。真的,这不会很好地工作,这种方式与基于“惯例”的设置不兼容。

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

您可以随时给我发电子邮件(插件的作者)直接有关这一点。

0

解决了我的问题!

我不知道这是否是最好的解决办法,但对我来说就像一个魅力...如果我得到一个更好的解决办法,我会让你知道......从

在NavigationTagLib.groovy

变化

def 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版本:1.3.4 导航版本:1.1.1


嗨,

首先感谢您的伟大的工作至今。

有没有解决问题的方法?

我刚刚从grails 1.2.1升级到1.3.4,遇到这个问题,1.2.1没有这个问题(为什么到目前为止还没有调试过)。

THX

1

好,我知道另一个解决办法...

变化从

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

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

,并添加到所有重定向/转发呼叫“flash.prevcon =控制器名称“

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") 
} 

} 
0

来解决这个问题最简单的方法是编辑NavigationService.groovy和变线62:

result.controller = p.controller 

result.controller = subitem.controller ? subitem.controller : p.controller 

不是U可以设置控制器PARAM在导航参数中,如下所示:

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'], 
    ], 
]