Posts tagged: groovy

Grails实现zip文件上传及加入文件方案

使用Grails和Groovy,实现了这样的需求: zip文件上传 zip文件上传后,在zip文件中加入自定义文本文件 在Grails实现复杂的数据录入上实现的本示例。示例如图:   准备工作:文件上传 首先说一下文件上传,在Grails中,借助Spring MVC的底层支持,实现还是很容易的。 视图: <body> <div style="margin-left: 15px;"> <g:message code="${flash.message}" /> <g:form action="uploadFile" method="post" enctype="multipart/form-data"> <input type="file" name="myFile" /> <input type="submit" value="上传" /> <input type="hidden" name="id" value="1"/> </g:form> </div> </body>   在这里hidden了一个参数,是用于服务器端使用的。    发送文章为PDF   

Grails图书示例纠正bug

在Grails实现复杂的数据录入中有一个bug,当新建图书,选择相关图书时,如果选择了相关图书,再次选择,还是出现全部已保存图书。 改动代码见下面:    发送文章为PDF   

星期二 七月 12th, 2011 in , , , , | No Comments »

Grails编写断点续传服务器端

在测试Tomcat对断点续传的支持中发现,Tomcat是支持静态内容的断点续传的,但是,它无法支持动态内容的断点续传。比如我有一些客户定制化数据,只有登录的用户才能下载。如果放在静态目录下,安全就形同虚设。 因此,在Grails中一般要放在WEB-INF目录的子目录下。比如: 这样的内容需要自己创建文件,然后输出到response的输出流上。因此断点续传必须自己实现。 日志引用ASIHTTPRequest实现断点续传    发送文章为PDF   

星期一 七月 11th, 2011 in , , , , , | No Comments »

使用Grails flash作用域

Grails引入了flash作用域的概念。这是很多高级web框架都引入的概念了。在Servlet中没有这个作用域。如果要处理这样的场景,比如更新(新建)表单提交,又重定向到表单页面,用户看不到什么变化。 比如这个界面(详见Grails实现复杂的数据录入),保存前后,都是相同的界面和相同的链接。无法让客户看出是否真的更新了。    发送文章为PDF   

星期一 七月 11th, 2011 in , , , | No Comments »

Grails实现复杂的数据录入

本示例由Grails实现备选相关图书修改而来。前者存在一些问题,在本示例中进行了纠正。 首先说一下实现的效果,新建图书: 点击增加按钮,可从图书列表中获取相关图书: 日志引用Grails实现zip文件上传及加入文件方案查找被关联对象Grails图书示例纠正bugGrails编写断点续传服务器端测试Tomcat对断点续传的支持使用Grails flash作用域    发送文章为PDF   

星期一 七月 11th, 2011 in , , , , , , | 2 Comments »

Grails实现备选相关图书

比如,由管理员手工挑选图书的相关图书。从用户体验上,这个选择,应该是异步的。即使用ajax。 当用户在图书编辑页面时,点击相关图书的增加按钮,应该弹出对话框,对话框中包含了可选的备选图书。 这里要保证,如果是编辑(不是新的图书),那么不能包含自身,也不能包含已经选择了的相关图书。 日志引用Grails实现复杂的数据录入    发送文章为PDF   

星期日 七月 10th, 2011 in , , , , , | No Comments »

Grails创建和更新实体使用相同的视图

创建和更新实体,是使用相同的视图还是不同的视图。这需要权衡。如果我来写,一般我希望是相同的,即,无论是新建图书还是编辑图书,使用相同的gsp页面。好处是便于维护。如果新建和编辑的流程出入较大,也是出于维护的角度,可能会考虑使用不同的视图。 以下写个简单的使用相同视图实现创建和更新的示例。示例是在Grails开发环境下如何生成模拟测试数据基础上做了改动。 实现的效果类似这样,如果是新增,链接中没有参数,显示空白的表单页面: 否则: 日志引用Grails实现备选相关图书    发送文章为PDF   

星期日 七月 10th, 2011 in , , , | No Comments »

使用Grails布局功能

Grails使用的是SiteMesh。这是最早在WebWork下使用的布局引擎。但是随着Struts的普及,Tiles的使用远远超过了SiteMesh。不过SiteMesh实现的布局很简介优雅,不需要编写很多劳什子的布局xml文件。 现在SiteMesh集成进Grails,使用起来也更简单了。下面的截图,就是使用SiteMesh的页面。 日志引用Grails实现复杂的数据录入    发送文章为PDF   

星期日 七月 10th, 2011 in , , , | No Comments »

Grails开发环境下如何生成模拟测试数据

开发环境下经常需要一些模拟测试数据。比如数据库中要有一些初始的实体。Grails提供了很好的办法。可在BootStrap.groovy中: 编写只针对开发环境的初始化代码: import bookproto.Book class BootStrap {     def init = { servletContext ->         environments{             development{                 def book=new Book(name:"中国史学史")                 book.save()                 println """book id: ${book.id}"""             }         }     }     def destroy = {     } } 以上示例是在Grails的GORM中使用uuid基础上做的处理。 日志引用Grails实现复杂的数据录入Grails实现备选相关图书Grails创建和更新实体使用相同的视图    发送文章为PDF   

星期日 七月 10th, 2011 in , , , | No Comments »

Grails的GORM中使用uuid

开发中,有很多情况需要使用不连续的随机生成的唯一标识。好处是: 可以隐藏商业细节,比如生成订单,自增列会暴露商业秘密 另外,自增列往往依赖数据库生成,对集群和分布式部署应用有影响,还有就是导入数据时需要对数据库自增列做设置 因此,使用uuid做实体唯一标识的地方很常见。在Grails实现实体自身多对多的变通方案基础上,把默认的native生成主键的方式改为使用uuid: class Book {     static constraints = {         bookRelation(nullable:true)     }         static mapping = {         id generator:’uuid.hex’, params:[separator:'-']    }        String id     String name     BookRelation bookRelation } 日志引用Grails实现复杂的数据录入Grails开发环境下如何生成模拟测试数据    发送文章为PDF   

星期五 七月 8th, 2011 in , , , | No Comments »