0

I search grailsApplication.controllerClasses filter in stackoverflow,and I follow that right answer.

I write codes like that.

  <g:each var="c" in="${grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName } }">
      <li>
        <g:link controller="${c.logicalPropertyName}" action="list" data-pjax='#main'>
                   <g:message code="${c.logicalPropertyName}.label" default="${c.logicalPropertyName}"/>
        </g:link>
      </li>
 </g:each>

it cause error stack

    org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error applying layout : bootstrap
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error evaluating expression [grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName }] on line [13]: null
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error evaluating expression [grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName }] on line [13]: null
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp$_run_closure2.doCall(bootstrap.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp.run(bootstrap.gsp:21)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error evaluating expression [grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName }] on line [13]: null
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp$_run_closure2.doCall(bootstrap.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp.run(bootstrap.gsp:21)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error evaluating expression [grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName }] on line [13]: null
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp$_run_closure2.doCall(bootstrap.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp.run(bootstrap.gsp:21)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error evaluating expression [grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName }] on line [13]: null
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_includes_subnav_gsp.run(subnav.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp$_run_closure2.doCall(bootstrap.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp.run(bootstrap.gsp:21)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)
root cause

java.lang.NullPointerException
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_includes_subnav_gsp$_run_closure3_closure8.doCall(subnav.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_includes_subnav_gsp$_run_closure3.doCall(subnav.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_includes_subnav_gsp.run(subnav.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp$_run_closure2.doCall(bootstrap.gsp:13)
    Users_wenhaoliu_Documents_workspace_posplus_grails_app_views_layouts_bootstrap_gsp.run(bootstrap.gsp:21)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:680)

but if I change code to

<g:each var="c" in="${grailsApplication.controllerClasses.each{GrailsClassUtils.isClassBelowPackage(it.class, ['com.posplus.product']) }.sort{ it.fullName } }">
       <li>
            <g:link controller="${c.logicalPropertyName}" action="list" data-pjax='#main'>
                  <g:message code="${c.logicalPropertyName}.label" default="${c.logicalPropertyName}"/>
            </g:link>
      </li>
</g:each>

it list all the controller. what's fault here?

Jasonw
  • 5,054
  • 7
  • 43
  • 48
sjbwylbs
  • 151
  • 14
  • Check this answer http://stackoverflow.com/a/9476222/206351 – Ben W May 18 '12 at 19:10
  • hi.i have read the answerbefore ask.have you try my code or eye it.when i use "it.clazz" ,cause nullpointexception. – sjbwylbs May 19 '12 at 01:48
  • i got the reason.i have a class is didn't have a package ,so it cause null point exception.that askwer is right!thanks. – sjbwylbs May 21 '12 at 05:38

2 Answers2

0

i deal with that.because the GrailsClassUtils.isClassBelowPackage can't deal with non package class.i wrote a function to solve this question.

public static boolean isClassBelowPackage(Class<?> theClass, List<?> packageList) {
    if(theClass.package==null)return false
    String classPackage = theClass.package.name;
    for (Object packageName : packageList) {
        if (packageName != null) {
            if (classPackage.startsWith(packageName.toString())) {
                return true;
            }
        }
    }
    return false;
}

in gsp is :

<g:each var="c" in="${grailsApplication.controllerClasses.findAll{MyGrailsClassUtils.isClassBelowPackage(it.clazz, ['com.posplus.product']) }.sort{ it.fullName } }">
      <li>
        <g:link controller="${c.logicalPropertyName}" action="list" data-pjax='#main'>
                   <g:message code="${c.logicalPropertyName}.label" default="${c.logicalPropertyName}"/>
        </g:link>
      </li>
 </g:each>
sjbwylbs
  • 151
  • 14
0

While I am sure your answer is working just fine, I can't understand why you didn't use the original GrailsClassUtils. All you needed to do is import them.

That's what I did, and it works just perfect.

It is not my intention to reply using an answer, but due to the lack of reputation, I have to.

f1v3
  • 379
  • 6
  • 12
  • 1
    In the version( 5 years ago version) didn't handle that. also can say's have a bug! it's fixed on your version,i think so . – sjbwylbs Aug 08 '17 at 17:16