`

Grails1.3.x至1.4.0(2.0)升级实践

阅读更多

 

这几天把一个Grails做的Web应用从1.3.7升级到1.4.0(目前还是M1),有很多兼容性问题,应用几乎都跑不起来,怪不得官方已经准备把1.4.0改成2.0发布。但幸运的是应用比较简单,问题并不多,也不很严重,可以通过修改少量代码来移植,下面讲述我遇到的问题以及解决过程,希望对准备升级的程序员有一些参考价值。主要有以下几项:

 

 

1. 自定义的js文件无法导入使用,且在IDE中修改js文件Web服务器不会自动加载(reload)

自定义的js原来用<g:javascript library="xxxxx"/>方式导入的,现在已经无效了,改为以下方式导入:

<g:javascript src="xxxxxx.js"/>

 或者使用Resources插件对js资源进行管理:

<r:external dir="js" file="xxxxx.js"/>
 

刷新页面,可以看到生成了<appname>/static/js/xxxxx.js,而不是原来的<appname> /js/xxxxx.js,而对<appname>?js/xxxxx.js的访问会自动重定向到static的资源上,这是Resource插件在起作用,此时的js文件(当然也包括其他资源,如CSS, images)作为了静态资源,任何对js文件的改动都不会对运行时的Web服务器生效。为了便于开发调试,需要在 Config.grovvy中加入设置

grails.resources.debug = true

 重启服务器后再修改js的内容时,服务器会自动reload资源。此时观察生成的代码,变成了

<appname>/js/xxxxx.js?_debugResources=y&n=1310271245143
 

 

 

2. formRemote标签(所有Ajax风格的标签)渲染报错

 

我使用了formRemote之类的标签无刷新提交表单,该标签会生成Ajax风格的HTML form,1.3.7之前的版本默认使用prototype作为Ajax工具,而1.4.0使用jQuery。升级后渲染页面会产生如下错误信息:

 

No javascript provider is configured at ......
 

这是因为默认的javascript框架从prototype改为jQuery,导致一些标签和JS功能无法正常使用。

首先需要安装jQuery插件和Resources插件(安装方法不赘述),然后在GSP页面中加入如下代码,显式设置JS框架为jQuery,

 

 

<g:setProvider library="jquery"/>

 

在layout/main.gsp中按照下面方式加入<r:layoutResource/>标签:

 

<head>
  <g:layoutHead />
  <r:layoutResources/>
</head>

 

此时刷新页面,查看网页代码可以发现已经生成了基于jQuery的代码。

 


3. 默认的开发数据库从HSQL改为H2。

因为之前我就把测试数据库改为了H2,因此在这个上面没有出现任何兼容性问题。不过H2确实是值得推荐的内存数据库,体积很小,但是功能齐全,开箱即用,与HSQL完全相同的工作模式和使用方法,配置方式都是一样的,但是比HSQL更加稳定(至少我是这么认为的,HSQL我无法开箱即用,我只是要做测试而已),功能更多。更为有趣的是,它自带了一个Web版本管理查询界面,用起来也很顺手。

 

 

4. createLinkTo(url="/")标签使用出错。

createLinkTo标签在1.4中被废弃,文档建议改用resource,而实际情况应该使用createLink标签,将代码改为createLink(uri:'/')即可。

 

 

5. 在Controller内定义的方法 def foo() 调用报错

错误信息为:

groovy.lang.MissingMethodException: No signature of method: xxx.yyy.foo() is applicable for argument types: (java.lang.String) values: [XXXXXX]
 

把方法定义def foo()改为 protected foo() 形式的定义即可。这个有点奇怪,是因为闭包的问题?还是def定义的可访问性原因?反正我没搞清楚,不想太深究。

 

 

分享到:
评论

相关推荐

    Grails 3.X开发实战

    ### Grails 3.X开发实战:Groovy基础详解 #### Groovy简介 Groovy是一种针对Java虚拟机(JVM)设计的动态编程语言,它融合了多种语言的优点,包括Python、Ruby以及Smalltalk等,旨在提供更为灵活和高效的开发体验。...

    grails3.2.8.7z.002

    grails3.2.8.7z.002 PART2

    Grails Cometed. Bin 1 The best web push

    Grails Cometed. Bin 1 The best web push

    Grails Cometed. Bin 3 The best web push

    Grails Cometed. Bin 3 The best web push

    Grails Cometed. Bin 2 The best web push

    Grails Cometed. Bin 1 The best web push

    使用GORM构建Spring Boot应用程序 Grails指南_ Grails框架.pdf

    你可以通过访问&lt;http://grails.org/index.html&gt; 和 &lt;https://travis-ci.org/grails-guides/gorm-without-grails&gt; 来获取更多关于Grails和项目的相关信息。 要开始项目,可以从GitHub上下载或克隆本指南提供的源代码...

    Grails Cometed. The best web push

    **Grails CometD:最佳Web推送技术** 在现代Web开发中,实时通信是不可或缺的一部分,它使得用户可以即时获取服务器端的数据更新,无需频繁刷新页面。Grails CometD框架就是为了实现这种实时交互而设计的。本文将...

    Grails综述.pdf

    【Grails框架综述】 Grails是一个基于Groovy编程语言的开源Web应用开发框架,它在2005年夏天诞生,旨在解决Java EE平台开发效率低下的问题。Grails构建于Spring、Hibernate等标准Java框架之上,为开发者提供了一个...

    Grails综述.docx

    Grails是一种基于Groovy语言的开源Web应用框架,它旨在简化Java开发流程,提供一种更加高效和简洁的方式构建应用程序。Grails的设计理念是"约定优于配置",这意味着它默认提供了许多开发规范,允许开发者快速上手,...

    Groovy and Grails Recipes.pdf

    根据提供的文件信息,我们可以从《Groovy and Grails Recipes》一书中提炼出多个与Groovy语言及Grails框架相关的知识点。下面将详细阐述这些知识点。 ### Groovy编程语言 **1. Groovy简介** - **定义**:Groovy是...

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008

    《Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008》这本书深入浅出地介绍了Groovy语言和Grails框架,旨在帮助初学者快速掌握这两项技术并转化为专业人士。Groovy和Grails是Java生态中的...

    elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件.zip

    elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件 Elasticsearch插件插件这个项目是一个基于Elasticsearch的插件,这个项目是基于的人完成的伟大工作的。你为什么想要为原来的Elasticsearch插件提供...

    Grails.2.A.Quick-Start.Guide.pdf

    - **Jared Richardson**(敏捷教练,Agile Artisans成员)认为这本书是新Grails开发者的最佳选择,“它提供了良好的教学与实践平衡,无论是初学者还是想要提升技能的人都能从中受益。” #### 内容概述 本书覆盖了...

    The.Definitive.Guide.to.Grails.Second.Edition.2009

    由于Grails是基于Groovy语言构建的,因此对于初学者来说,掌握一定的Groovy基础知识至关重要。这包括: - **语法基础**:了解Groovy的基本语法结构,如变量定义、流程控制语句等。 - **面向对象编程**:Groovy支持...

    grails-1.3.0.RC2

    Grails 是一个基于 Groovy 语言的开源全栈式Web应用框架,它简化了Java开发流程,提供了丰富的功能集和高效的生产力。Grails 1.3.0.RC2(Release Candidate 2)是该框架的一个重要版本,代表了1.3.0系列的候选发布版...

    grails-5.1.2.zip

    Grails 5.x系列基于Spring Boot,这意味着你可以利用Spring Boot的诸多优势,如自动配置、健康检查和内嵌服务器。在5.1.2版本中,这种集成可能更加紧密,提供更好的性能和更少的配置需求。 7. **测试框架**: ...

    grails-1.2.2.zip

    Grails 1.2.2是该框架的一个重要版本,它在1.x系列中扮演了承上启下的角色,引入了许多改进和新特性,进一步提升了开发者的生产力。 首先,我们来了解一下Grails的核心特性。Grails是基于MVC(Model-View-...

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.2008.rar

    《 Beginning Groovy and Grails: From Novice to Professional 2008》是Apress出版社在2008年发布的一本专为初学者至专业人士准备的编程书籍,主要介绍了Groovy和Grails两种强大的开源技术。这本书的核心目标是帮助...

Global site tag (gtag.js) - Google Analytics