2017-02-27 95 views
0

我的grails项目至少有20个控制器,每个控制器至少有4个方法,并且它正在不断发展。我决定注释这样每一个方法:按需添加URL映射

import enums.URLMapped 

class HomeController { 
    @URLMapped(url="/", alias="home") 
    def landingPage() { 
     render(view: "/index") 
    } 
} 

我如何可以追加动态的URLMapping.groovy这里面的URL值?我可以这样做:

import enums.URLMapped 
import java.lang.reflect.Method 
import org.apache.commons.lang.StringUtils 
import org.codehaus.groovy.grails.commons.DefaultGrailsControllerClass 
import org.codehaus.groovy.grails.commons.GrailsApplication 

class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?(.$format)?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     // My annotation crawler/parser 
     for(DefaultGrailsControllerClass controller in GrailsApplication.getControllerClasses()) { 
      for(Method method in controller.getClazz().getDeclaredMethods()) { 
       if(!method.isSynthetic()) { 
        if(method.isAnnotationPresent(URLMapped.class)) { 
         URLMapped url = method.getAnnotation(URLMapped.class) 
         name "${url.alias()}": "${url.url()}" { 
          action="${method.getName()}" 
          controller="${StringUtils.capitalize(controller.getClazz().getSimpleName().split(/Controller/).getAt(0)}" 
         } 
         /* What I want to achieve above is this static URL: 
          name home: "/" { 
           action="landingPage" 
           controller="Home" 
          } 
         */ 
        } 
       } 
      } 
     } 
    } 
} 

但问题是,static mapping是一个封闭,你不应该假设循环里面(?)。那么如何添加我的网址?我始终可以将所有链接的所有静态URL都放在这里,这只是令人乏味的维护。

回答