本文介绍了Grails grailApplication.controllerClasses按包排序控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码抓取所有控制器,排序和输出在li标签:

 < g: each var =cin =$ {grailsApplication.controllerClasses.sort {it.fullName}}> 
< li<%= c.logicalPropertyName == controllerName? 'class =active':''%>>
< g:link controller =$ {c.logicalPropertyName}> $ {c.naturalName}< / g:link>
< / li>
< / g:each>

我需要通过软件包过滤出控制器,例如grab控制器。 >

例如:

  com.app.module.mars.controller.HelloController 
com.app.module.venus.controller.PrintController

m包装控制器由模块,所以火星将有自己的一套控制器和金星将有自己的。然后在UI中我想使用上面的代码(有一些过滤器),它将显示模块作为主菜单和他们的控制器作为下拉菜单。



如何应用过滤器?或者如果你能指导我在正确的方向是伟大的。感谢。

解决方案

您可以使用,它接受一个类和一个包列表作为参数。所以这应该做的诀窍:

  GrailsClassUtils.isClassBelowPackage(c.class,['com.app.module.mars'] )

编辑: grailsApplication.controllerClasses 您列出了 GrailsClass 对象,因此您需要使用 c.clazz 而不是 c.class like

  grailsApplication.controllerClasses.each {c  - > 
GrailsClassUtils.isClassBelowPackage(c.clazz,['com.app.module.mars'])
}


I have the following code that grabs all controllers, sorts it, and outputs in li tags:

<g:each var="c" in="${grailsApplication.controllerClasses.sort { it.fullName } }">
        <li<%= c.logicalPropertyName == controllerName ? ' class="active"' : '' %>>
                <g:link controller="${c.logicalPropertyName}">${c.naturalName}</g:link>
        </li>
</g:each>

I have a need to filter out controllers by package i.e. grab controller from a certain package.

For example:

com.app.module.mars.controller.HelloController
com.app.module.venus.controller.PrintController

As you can see I'm packaging controllers by modules, so mars will have its own set of controllers and venus will have its own. Then in the UI I want to use the above code (with some filter) which will show modules as main-menus and their controllers as dropdowns.

How can I apply such a filter? Or if you could guide me in the right direction would be great. Thanks.

解决方案

You can use GrailsClassUtils.isClassBelowPackage() which takes a class and a list of packages as the arguments. So this should do the trick:

GrailsClassUtils.isClassBelowPackage(c.class, ['com.app.module.mars'])

Edit: grailsApplication.controllerClasses probably gives you a list of GrailsClass objects, so you'd want to use c.clazz instead of c.class like

grailsApplication.controllerClasses.each { c ->
    GrailsClassUtils.isClassBelowPackage(c.clazz, ['com.app.module.mars'])
}

这篇关于Grails grailApplication.controllerClasses按包排序控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 22:19