精通Grails: 用Groovy服务器页面(GSP)改变视图 - 编程入门网
)公开表示,“自定义 TagLib 是合适的架构性解决方案。”,然后却偷偷地编写 scriptlet,以为别人看不到。编写自定义 JSP TagLib 需要的工作太多,所以难以抵抗 scriptlet 的诱 惑。scriptlet 并不是正确的方法,但不幸的是,它是一种容易实现的方法。
Scriptlet 破坏了 HTML 基于标记的范式,将原始代码直接引入视图。错误的并不是代码本身,而是 它们缺少封装和重用的潜力。重用 Scriptlet 的惟一方式就是 “复制-粘贴”。这导致 bug、代码膨胀 ,并严重违背了 DRY 原则。更不用说 Scriptlet 在可测试性方面的匮乏了。 这就是说,我必须坦白,随着开发期限越来越紧迫,我写的 JSP scriptlet 的比例也相当大。JPS 标 准标记库(JSP Standard Tag Library,JSTL)在这方面帮助了我很多,但是编写我自己的自定义 JSP 标记则完全是另一回事。在我用 Java 代码编写自定义 JSP 标记、编译标记,并将大量时间浪费在将标 记库描述符(Tag Library Descriptor,TLD)设置为正确的格式和位置时,我已经完全忘记了当初编写 这个标记的理由是什么。编写测试来验证我的新 JSP 标记是否正确也同样麻烦 — 只能说我的出发点是 好的。 对比之下,用 Grails 编写自定义 TagLibs 简直就是举手之劳。Grails 框架使得做正确的事(包括 编写测试)变得很容易。例如,我经常需要在 Web 页面底部加上标准的版权声明。版权声明应该是这样 的: © 2002 - 2008, FakeCo Inc. All Rights Reserved.。问题在于,我希望第二个年份总是当 前的年份。清单 6 显示了用 scriptlet 如何完成这个任务: 清单 6. 用 scriptlet 完成的版 权声明
精通Grails: 用Groovy服务器页面(GSP)改变视图(4)时间:2011-08-02 IBM Scott Davis既然知道了如何处理当前年份,那么下面就要创建一个执行同样任务的自 定义标记。请输入 grails create-tag-lib Date,这会创建两个文件:grails- app/taglib/DateTagLib.groovy(TagLib)和 grails-app/test/integration/DateTagLibTests.groovy (测试)。将清单 7 中的代码添加到 DateTagLib.groovy: 清单 7.简单的自定义 Grails 标记
清单 7 创建一个 <g:thisYear> 标记。可以看到,年份直接写入输出流。清单 8 显示了新标记的效用: 清 单 8.使用自定义标记的版权声明
您可能以为这就完成了。非常抱歉,这只完成了一半。 测试 TagLibs 即使现在看起来一切正常,还是应该编写一个测试,确保这个标记日后不会出错。 Working Effectively with Legacy Code 的作者 Michael Feathers 说过,任何没有测试的代码都是遗 留代码。为了防止 Feathers 先生大发雷霆,请将清单 9 的代码添加到 DateTagLibTests.groovy: 清单 9.自定义标记的测试
GroovyTestCase 是在 JUnit 3.x TestCase 之上一层薄薄的 Groovy 层。为只有一行代码的标记编写 测试看起来 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |