【问题标题】:Grails 2.4.4. grails.rest.RestfulController. How to override the delete method?圣杯 2.4.4。 grails.rest.RestfulController。如何覆盖删除方法?
【发布时间】:2015-03-02 20:43:04
【问题描述】:

如何覆盖删除方法?

此构造不会覆盖我做错的方法? :

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

grailsApplication.controllerClasses.each {controller ->

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

                controller.metaClass.delete = { Map m ->

                     ....
                }
            }
        }

【问题讨论】:

  • 目前还不清楚您要做什么。不清楚的一件事是为什么您希望 delete 方法接受 Map 参数。除此之外,一个问题是您可能想要操纵controller.clazz.metaClass 而不是controller.metaClass。此外,处理NOT_TOUCH 事物的更有效方法是if(!(controller.name in NOT_TOUCH)) {...}
  • 另外,请注意,您的运行时元编程不会在 Java 代码或任何标有 @CompileStatic 的 Groovy 代码中可见。核心框架的一部分属于这些类别中的每一个。我建议您在groups.google.com/forum/#!forum/grails-dev-discuss 上发帖说明您真正想要完成的工作。根据您要完成的工作,几乎可以肯定有比您在此处描述的更好的方法。
  • 为什么调用instance.save时没有设置修饰符插入/更新? github.com/grails/grails-core/blob/master/grails-plugin-rest/…
  • 我无法理解覆盖 save "domainClazz.metaClass.save = { Map m -> ...." 时执行了什么操作?
  • 这不是您问题的答案,但为什么您希望保存操作接受 Map 参数?即使您尝试做的事情会奏效(它不会),我也不知道您想用Map 完成什么。我建议您在 groups.google.com/forum/#!forum/grails-dev-discuss 上发布一条说明,描述您真正想要完成的工作。根据您要完成的工作,几乎可以肯定有比您在此处描述的更好的方法。

标签: grails grails-controller


【解决方案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 ->

                    ...
                }
            }
        }

【讨论】:

  • 虽然这个答案可能是正确且有用的,但最好在其中附上一些解释来解释它如何帮助解决问题。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。
猜你喜欢
  • 2015-06-15
  • 2015-08-20
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多