首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >您最喜欢的Grails调试技巧是什么?

您最喜欢的Grails调试技巧是什么?
EN

Stack Overflow用户
提问于 2009-02-11 12:40:53
回答 6查看 17K关注 0票数 56

Grails的堆栈转储很长,调试起来有点麻烦。要找到问题的根源可能很棘手。例如,在执行"def foo = new Foo(a: a,b: b).save()“时,我在BootStrap.groovy中遇到过几次麻烦。你最喜欢的Grails应用调试技巧是什么?

EN

回答 6

Stack Overflow用户

发布于 2010-10-13 02:27:40

使用GrailsUtil记录异常。

代码语言:javascript
复制
try{
   ...
}catch (Exception e){
   log.error("some message", GrailsUtil.sanitize(e))
   ...
}

More info about sanitize.

票数 7
EN

Stack Overflow用户

发布于 2010-01-02 09:48:55

我不确定这是否可以开箱即用,但在webapps中,我发现有一个“我是谁?”是有用的。各种视图文件中的工具。

其思想是在呈现的HTML中发出一条消息,以识别片段。当我第一次遇到应用程序时,这一点尤其正确。

在Grails中,我使用一个自定义标记来实现这一点。例如,考虑学生的list.gsp:

代码语言:javascript
复制
<g:debug msg="student list" />

代码如下:

代码语言:javascript
复制
class MiscTagLib {
    def debug = { map ->
        if (grailsApplication.config.grails.views.debug.mode == true) {
            def msg = map['msg']
            out << "<h2>${msg}</h2><br/>"
        }
    }
}

关键是,如果需要,您可以将这些标记留在其中,因为只有在Config.groovy中启用了该模式时,它们才会出现:

代码语言:javascript
复制
grails.views.debug.mode=true
票数 5
EN

Stack Overflow用户

发布于 2011-12-06 00:22:18

将此代码添加到Bootsrap.groovy:init将覆盖保存方法并执行一些其他代码,在本例中将打印出错误消息。

代码语言:javascript
复制
class BootStrap {

    def grailsApplication

    def init = {servletContext ->

        grailsApplication.domainClasses.each { clazz ->
            clazz.clazz.get(-1)

            def gormSave = clazz.metaClass.getMetaMethod('save')

            clazz.metaClass.save = {->

                def savedInstance = gormSave.invoke(delegate)
                if (!savedInstance) {
                    delegate.errors.each {
                        println it
                    }
                }
                savedInstance
            }

            def gormSaveMap = clazz.metaClass.getMetaMethod('save', Map)
            clazz.metaClass.save = { Map m ->
                def savedInstance = gormSaveMap.invoke(delegate, m)
                if (!savedInstance) {
                    delegate.errors.each {
                        println it
                    }
                }
                savedInstance

            }

            def gormSaveBoolean = clazz.metaClass.getMetaMethod('save', Boolean)
            clazz.metaClass.save = { Boolean b ->
                def savedInstance = gormSaveBoolean.invoke(delegate, b)
                if (!savedInstance) {
                    delegate.errors.each {
                        println it
                    }
                }
                savedInstance


            }
        }
...
}

希望这对某人有帮助:)

(我知道这不是真的很干燥)

参考:http://grails.1312388.n4.nabble.com/How-to-override-save-method-on-domain-class-td3021424.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/536601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档