`

升级到Grail1.1.2的问题(1):Problem on binding one-to-many data

阅读更多

【问题】

view(gsp页面)上有select box,在Controller里面调用xxxInstance.properties = params时,会报错:

 

{{org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Error occurred creating command object.
....
....
Caused by: java.lang.ClassCastException: B$_clinit_closure1 cannot be cast to java.util.Map
at org.codehaus.groovy.grails.web.binding.GrailsDataBinder.getConstrainedPropertyForPropertyValue(GrailsDataBinder.java:309)

 

【临时解决办法】

Step1.升级到最新的hibernate 1.1.3-SNAPSHOT

grails install-plugin hibernate 1.1.3-SNAPSHOT

Step2. putting the following in BootStrap

private static convertToType(value, targetType) {
        SimpleTypeConverter typeConverter = new SimpleTypeConverter()

        if (value != null && !targetType.isAssignableFrom(value.class)) {
            if (value instanceof Number && Long.class.equals(targetType)) {
                value = value.toLong()
            }
            else {
                try {
                    value = typeConverter.convertIfNecessary(value, targetType)
                } catch (org.springframework.beans.TypeMismatchException e) {
                    // ignore
                };
            }
        }
        return value
    }

    def init = { servletContext ->

        //---------------------------------------------------------------------
        // FIX BUG GRAILS-5445
        //---------------------------------------------------------------------
        def ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext)
        
        if(ctx.containsBean("sessionFactory")) {
            def sf = ctx.getBean("sessionFactory")
            def template = new HibernateTemplate(sf)
            for(d in ctx.getBean("grailsApplication").domainClasses) {
                def domain = d
                def identityType = domain.identifier.type
                domain.clazz.metaClass.static.get = { Serializable id ->
                    id = convertToType(id, identityType)
                    def obj = id ? template.get(domain.clazz,id) : null
                    if(obj && obj instanceof org.hibernate.proxy.HibernateProxy) {
                        obj = obj.getHibernateLazyInitializer().implementation
                    }
                    return obj
                }
            }
        }

 如果Step1能解决问题,则不需要进行step2了。

 

【结论及其他】

1. 升级一个小版本号就引发这么大的问题,实在让人心寒,不过答复倒是挺快,临时解决方案也有了

2. 官方答复在1.1.3中修复此问题

3. 本问题Jira地址:http://jira.codehaus.org/browse/GRAILS-5445

分享到:
评论

相关推荐

    Bioinformatics - From Genomes to Therapies: Volumes 1-3 part 1

    Bioinformatics - From Genomes to Therapies: Volume 1: The Building Blocks: Molecular Sequences and Structures; Volume 2: Getting at the Inner Workings: ... Volume 3: The Holy Grail: Molecular Function...

    Bioinformatics - From Genomes to Therapies: Volumes 1-3 part 2

    Bioinformatics - From Genomes to Therapies: Volume 1: The Building Blocks: Molecular Sequences and Structures; Volume 2: Getting at the Inner Workings: ... Volume 3: The Holy Grail: Molecular Function...

    Bioinformatics - From Genomes to Therapies: Volumes 1-3 part 3

    Bioinformatics - From Genomes to Therapies: Volume 1: The Building Blocks: Molecular Sequences and Structures; Volume 2: Getting at the Inner Workings: ... Volume 3: The Holy Grail: Molecular Function...

    测量程序编制 - python 27数据类型:List(列表)-遍历.pptx

    `range(len(list))` 生成了一个从0到列表长度减1的整数序列,这在需要访问列表的索引时非常实用。 遍历列表是Python编程中基础但关键的部分,它在数据处理、逻辑控制以及算法实现等方面发挥着重要作用。了解并熟练...

    Groovy and Grails Recipes(清晰PDF)

    **1. Getting Started with Groovy** - **介绍**: 本章主要介绍了如何开始使用Groovy编程语言。对于初次接触Groovy的新手来说,这是一个很好的起点。 - **核心知识点**: - 安装Groovy环境 - Groovy脚本的基本语法...

    grail-matlab-master Generic RepresentAtIon Learning for

    《grail-matlab-master:通用时间序列表示学习框架详解》 在当今的机器学习领域,时间序列数据的处理和分析扮演着至关重要的角色。grail-matlab-master 是一个专注于时间序列数据的通用表示学习(Generic ...

    Grail-Indicator.zip_Grail-Indicator_binary Indicator_binary opti

    在压缩包"Grail-Indicator.zip"中,包含了Grail Indicator的安装和使用指南。用户需按照说明正确安装到交易平台,如MetaTrader或其他支持自定义指标的平台。安装完成后,即可在图表上看到Grail Indicator提供的实时...

    Apress Expert F#(Take functional programming to the next level )

    mathematics, and since the early days of computing science, the holy grail has been to close the semantic gap between scientific models and executable code as much as possible. It is becoming ...

    grail:圣杯 - 同构应用程序框架

    Grail - 基于 React 的简单同构应用程序框架 使用 Grail,您只需编写前端代码,您可以使用任何您喜欢的后端。 Grail 适用于任何 API - java、python 或 ruby​​。 ##安装 npm install grail --save ##入门 ...

    Beast Super Signal Grail_grail_forex_trading_

    《Beast Super Signal Grail:探索自动外汇交易的精粹》 在外汇交易的世界中,技术分析工具扮演着至关重要的角色。"Beast Super Signal Grail"是一个专为MetaTrader 4(MT4)平台设计的高级指标,旨在帮助交易者更...

    holy-grail-markup:所有CSS方法论在一处比较了示例

    您可以通过URL地址https://aleshaoleg.github.io/holy-grail-markup/implementetion/specificity-graph查找每种实现的特异性图。 例如,这里的raw示例: : 。 s 由和创建。 合作者: 。 贡献者 和CSS-Modules示例...

    Groovy Grail的eclipse插件

    Grails则是一个基于Groovy的开源Web应用框架,它借鉴了Ruby on Rails的设计理念,提供了模型-视图-控制器(MVC)架构模式,简化了开发流程,使开发者能快速创建全功能的Web应用。Grails的特性包括自动化 ORM(对象...

    matlab十六进制转十进制代码-conf:conf

    matlab十六进制转十二进制代码 Vim,Bash等al。 该存储库包含我的个人配置文件。 还有一些东西。 编程技巧 Vim 一般提示 ...Cx:在正常模式下,当...holy-grail :help | :Ni! :autocmd UserGettingBored * echo "Hello" :

    grail-css:简单,没有胡扯CSS助手,重置和实用程序

    1. **CSS助手**:grail-css 包含了一系列预定义的CSS类,这些类可以帮助开发者快速实现常见的样式需求,如文本对齐、颜色调整、浮动、清除浮动、隐藏元素等,减少了手动编写CSS的工作量。 2. **重置样式**:在不同...

    grail:Grail Web 浏览器的一个分支

    6. **版本控制**:Git 是一个分布式版本控制系统,"grail-master" 文件表明项目使用 Git 进行版本管理和协作,"master" 分支是项目的主要开发分支,代表了最稳定的状态。 7. **社区驱动**:作为开源项目,Grail ...

    holy-grail-ios-layout:尝试圣杯移动野生动物园布局行为

    这是我在iOS Safari移动版的The Holy Grail:trade_mark:中进行的拍摄。 以下目标分为有效的和无效的: 什么有效: 没有整页的“橡皮筋”。 导航栏是固定的,固定的,固定的。 滚动主要内容“橡皮筋”,并且仅...

    grail-diary-part-1:iOS应用程式,可追踪名胜古迹

    圣杯日记第1部分-自动版式 完成该项目的学生表明他们可以: 了解并解释什么是自动版式及其解决的问题 使用Interface Builder中的约束来实现通用布局 使用UIStackView实现通用布局 介绍 Grail Diary是一款应用程序,...

Global site tag (gtag.js) - Google Analytics