grails – 重写Groovy的java.util.Date toString方法
我有一个Grails(版本2.5.0; Groovy版本2.4.3)应用程序,我使用CustomPropertyEditorRegistry来覆盖使用fieldvalue时的日期格式.
我安装了ElasticSerach Grails插件版本0.0.4.4,安装后我注意到自定义属性编辑器不再工作了.为了暂时解决这个问题,我决定使用Groovy的元编程简单地覆盖java.util.Date的toString()方法. 我把它添加到Bootstrap.groovy: Date.metaClass.toString = { return delegate.format("MM/dd/yyyy HH:mm") } 但是,当我去Grails控制台时(使用Grails Console插件): new Date("Fri Jun 12 12:36:02 EDT 2015") as String == "Fri Jun 12 12:36:02 EDT 2015" new Date("Fri Jun 12 12:36:02 EDT 2015").toString() == "06/12/2015 12:36" println(new Date("Fri Jun 12 12:36:02 EDT 2015")) // prints Fri Jun 12 12:36:02 EDT 2015 println(new Date("Fri Jun 12 12:36:02 EDT 2015").toString()) // prints 06/12/2015 12:36 任何帮助搞清楚自定义属性问题和/或重写日期toString()将不胜感激.我在ElasticSearch Grails插件GitHub上打开了一个问题,问题#115也是如此 编辑: 我用Grails和Groovy进行了一些测试. 我在Bootstrap.groovy中使用此代码创建了一个新的Grails 2.5.0应用程序: Date.metaClass.toString = { return delegate.format("MM/dd/yyyy HH:mm") } 并将其添加到index.gsp视图中: <ul> <li>new Date().toString() == ${new Date().toString()}</li> <li>new Date() == ${new Date()}</li> <li>new Date() as String == ${new Date() as String}</li> </ul> /*Output: new Date().toString() == 06/15/2015 10:32 new Date() == Mon Jun 15 10:32:33 EDT 2015 new Date() as String == Mon Jun 15 10:32:33 EDT 2015 */ 我还使用Groovy版本2.4.3使用此代码/输出启动了groovyConsole: Date.metaClass.toString = { return delegate.format("MM/dd/yyyy HH:mm") } println(new Date()) println(new Date() as String) println(new Date().toString()) /*Output: 06/15/2015 10:38 Mon Jun 15 10:38:12 EDT 2015 Mon Jun 15 10:38:12 EDT 2015 */ 所以这似乎是Groovy中的一个不一致,它不是从修改过的元类方法调用toString(),除非我做错了什么或误解了什么. 解决方法
你说你正在使用Groovy控制台,但你的意思是你正在运行grails控制台,对吧?启动控制台时,BootStrap不会运行,仅在运行应用程序和测试中运行.如果在控制台中运行toString覆盖,然后运行示例代码,它应该可以正常工作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |