快速业务通道

精通Grails: 文件上传和Atom联合 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
Instance.filename}"> <p> <img src="${createLinkTo(dir:''payload/''+entryInstance.author.login, file:''''+entryInstance.filename)}" alt="${entryInstance.filename}" title="${entryInstance.filename}" /> </p> </g:if></div>

由于上传文件是可选的,我将输出包含在一个 <g:if> 块中。如果 entryInstance.filename 字段被填充,则在一个 <img> 标记中显示结果。

图 2 显示新的列表,同时还在显眼的地方显示上传的 Grails 徽标:

图 2. 显示上传的图像

精通Grails: 文件上传和Atom联合 - 编程入门网

但是,如果用户上传其他东西,而不是图像呢?这时就不是将更多的逻辑放入到 GSP 中了,最好的地 方是一个定制的 TagLib。

精通Grails: 文件上传和Atom联合(7)

时间:2011-08-02 IBM Scott Davis

创建 TagLib

Blogito 在 grails-app/taglib 中已经有两个 TagLib:DateTagLib.groovy 和 LoginTagLib.groovy 。在一个 TagLib 中可以定义任意数量的定制标记,但是这一次我建议创建一个新的 TagLib,以便按语 义将标记分组。在命令提示符下输入 grails create-tag-lib Entry,并添加清单 12 中的代码:

清单 12. 创建 displayFile 标记

class EntryTagLib {  def displayFile = {attrs, body->    def user = attrs

["user"]    def filename = attrs["filename"]    if(filename)

{      def extension = filename.split("\\.")[-1]      def userDir = 

"payload/${user}"      switch(extension.toUpperCase()){        case 

["JPG", "PNG", "GIF"]:             def html = 

"""             <p>               <img 

src="${createLinkTo(dir:''''+userDir,                                        

file:''''+filename)}"                    alt="${filename}"              

      title="${filename}" />             </p>             

"""             out << html             break        case 

"HTML":             out << "p>html</p>"           

  break        default:             out << 

"<p>file</p>"             break      }    }else{      

out << "<!-- no file -->"    }  }}

精通Grails: 文件上传和Atom联合(8)

时间:2011-08-02 IBM Scott Davis

不久后可以看到,该代码创建一个 <g:displayFile> 标记,该标记需要两个属性:user 和 filename。如果 filename 属性被填充,则取得文件扩展名,并将其转换为大写形式。

Groovy 中的 Switch 语句比 Java 中的对等物的灵活性要大得多。首先,可以在 String 上进行切换 (而 Java 语言只能在 int 上进行切换)。更令人惊奇的是,case 既可以指定一个条件列表 List,也 可以指定单个的条件。

有了这个 TagLib 后,可以大大简化 _entry.gsp 局部模板,如清单 13 所示:

清单 13. 简化的局部模板

<div class="entry">  <span class="entry-date">  

    <g:longDate>${entryInstance.lastUpdated}</g:longDate> : 

${entryInstance.author}  </span>  <h2><g:link action="show" 

id="${entryInstance.id}">${entryInstance.tit

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号