2015-03-02 43 views
-1

如何覆盖删除方法?Grails 2.4.4。 grails.rest.RestfulController。如何覆盖删除方法?

这种构造不会覆盖我做错的方法吗? :

def NOT_TOUCH = ['Assets', 'Dbdoc', 'Login', 'Logout'] 

grailsApplication.controllerClasses.each {controller -> 

      if(NOT_TOUCH.findAll{it == controller.name} == []){ 

       controller.metaClass.delete = { Map m -> 

        .... 
       } 
      } 
     } 
+0

这是不是真的清楚你正在尝试做的。有一点不清楚的是你为什么要'delete'方法接受'Map'参数。与此不同的是,一个问题是你可能想操作'controller.clazz.metaClass'而不是'controller.metaClass'。另外,处理'NOT_TOUCH'事件的更有效方法是if(!(controller_name in NOT_TOUCH)){...}'。 – 2015-03-03 02:56:22

+0

另外,请注意,您的运行时元编程不会从Java代码或任何标有@CompileStatic的Groovy代码中可见。核心框架的各个部分都属于这些类别。我建议您在https://groups.google.com/forum/#!forum/grails-dev-discuss上发布说明,说明您真正想要完成的事情。根据你想要完成的事情,几乎可以肯定有比你在这里描述的更好的方法去做。 – 2015-03-03 03:02:14

+0

为什么在调用instance.save时没有设置修饰符插入/更新? https://github.com/grails/grails-core/blob/master/grails-plugin-rest/src/main/groovy/grails/rest/RestfulController.groovy – igilfanov 2015-03-06 12:50:38

回答

-1

仅适用于重定向和回应:

def NOT_TOUCH = ['Assets', 'Dbdoc', 'Login', 'Logout'] 

     grailsApplication.controllerClasses.each {controller -> 

      if(!(controller.name in NOT_TOUCH)){ 

       controller.clazz.metaClass.invokeMethod = { String name, args -> 

        ... 
       } 
      } 
     } 
+0

虽然这个答案可能是正确和有用的,但如果您在解释问题时加入一些解释来解释它是如何有助于解决问题的,那么这是首选。如果存在导致其停止工作并且用户需要了解其曾经工作的变化(可能不相关),这在未来变得特别有用。 – 2015-03-05 18:14:09