这几天把一个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开发实战:Groovy基础详解 #### Groovy简介 Groovy是一种针对Java虚拟机(JVM)设计的动态编程语言,它融合了多种语言的优点,包括Python、Ruby以及Smalltalk等,旨在提供更为灵活和高效的开发体验。...
grails3.2.8.7z.002 PART2
Grails Cometed. Bin 1 The best web push
Grails Cometed. Bin 3 The best web push
Grails Cometed. Bin 1 The best web push
你可以通过访问<http://grails.org/index.html> 和 <https://travis-ci.org/grails-guides/gorm-without-grails> 来获取更多关于Grails和项目的相关信息。 要开始项目,可以从GitHub上下载或克隆本指南提供的源代码...
**Grails CometD:最佳Web推送技术** 在现代Web开发中,实时通信是不可或缺的一部分,它使得用户可以即时获取服务器端的数据更新,无需频繁刷新页面。Grails CometD框架就是为了实现这种实时交互而设计的。本文将...
【Grails框架综述】 Grails是一个基于Groovy编程语言的开源Web应用开发框架,它在2005年夏天诞生,旨在解决Java EE平台开发效率低下的问题。Grails构建于Spring、Hibernate等标准Java框架之上,为开发者提供了一个...
Grails是一种基于Groovy语言的开源Web应用框架,它旨在简化Java开发流程,提供一种更加高效和简洁的方式构建应用程序。Grails的设计理念是"约定优于配置",这意味着它默认提供了许多开发规范,允许开发者快速上手,...
根据提供的文件信息,我们可以从《Groovy and Grails Recipes》一书中提炼出多个与Groovy语言及Grails框架相关的知识点。下面将详细阐述这些知识点。 ### Groovy编程语言 **1. Groovy简介** - **定义**:Groovy是...
《Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008》这本书深入浅出地介绍了Groovy语言和Grails框架,旨在帮助初学者快速掌握这两项技术并转化为专业人士。Groovy和Grails是Java生态中的...
elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件 Elasticsearch插件插件这个项目是一个基于Elasticsearch的插件,这个项目是基于的人完成的伟大工作的。你为什么想要为原来的Elasticsearch插件提供...
- **Jared Richardson**(敏捷教练,Agile Artisans成员)认为这本书是新Grails开发者的最佳选择,“它提供了良好的教学与实践平衡,无论是初学者还是想要提升技能的人都能从中受益。” #### 内容概述 本书覆盖了...
由于Grails是基于Groovy语言构建的,因此对于初学者来说,掌握一定的Groovy基础知识至关重要。这包括: - **语法基础**:了解Groovy的基本语法结构,如变量定义、流程控制语句等。 - **面向对象编程**:Groovy支持...
Grails 是一个基于 Groovy 语言的开源全栈式Web应用框架,它简化了Java开发流程,提供了丰富的功能集和高效的生产力。Grails 1.3.0.RC2(Release Candidate 2)是该框架的一个重要版本,代表了1.3.0系列的候选发布版...
Grails 5.x系列基于Spring Boot,这意味着你可以利用Spring Boot的诸多优势,如自动配置、健康检查和内嵌服务器。在5.1.2版本中,这种集成可能更加紧密,提供更好的性能和更少的配置需求。 7. **测试框架**: ...
Grails 1.2.2是该框架的一个重要版本,它在1.x系列中扮演了承上启下的角色,引入了许多改进和新特性,进一步提升了开发者的生产力。 首先,我们来了解一下Grails的核心特性。Grails是基于MVC(Model-View-...
《 Beginning Groovy and Grails: From Novice to Professional 2008》是Apress出版社在2008年发布的一本专为初学者至专业人士准备的编程书籍,主要介绍了Groovy和Grails两种强大的开源技术。这本书的核心目标是帮助...