用Grails的TagLib实现博客模板兼论TagLib是否应被一棍子打死

2024-04-21 14:38

本文主要是介绍用Grails的TagLib实现博客模板兼论TagLib是否应被一棍子打死,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在JavaEye上参加了两次讨论,《 Grails is a breath of fresh air for Java developers》和《 Java web开发你还会选择其他的框架吗?》,在Robbin的带领下两次讨论渐渐变成了对TagLib的大批判,总体来说大概有两种观点,一种是以Robin为代表的革命派,认为TagLib是一种历史的倒退,早应该被抛弃了;另一种观点是TagLib确实很难看,不过也不是一无是处。

Robbin对TalLib是深恶痛绝的:

Grails只能使用JSP Tag作为view层实现,简直就是历史的倒退,基本上凡是强制使用JSP Tag的Java Web框架,我无一例外的反感……
只要JSF还用JSP Tag,就绝对不值得考虑……
jsp tag的致命缺点有三:
1、极难扩展

在页面扩展可重用片断,必须自己用Java编写自定义Tag。而这个工作对于模板语言例如freemarker来说是很简单的事情,即使可以自定义tag,也会造成tag泛滥,项目难以维护。

2、不能脱离Servlet容器存在
必须紧密藕合Servlet容器,造成View根本无法测试,无法扩展

3、无法动态切换View
对于类似博客网站是致命缺点,博客切换模板,要求根据程序的状态,动态切换整套不同的View,JSP Tag完全做不到这一点。

其实保这种观点的人还是很多的,今天看到ajax的站长李锟也这样说:

2001年我做Web开发使用的是ColdFusion,在当时几种Web开发技术ASP、PHP、JSP、ColdFusion中, ColdFusion的开发效率是最高的。但是ColdFusion是商业产品,在国内的用户很少。ColdFusion全部使用自定义的tag来做开 发,JSP开始支持自定义tag,并且在JSTL推出之后建议完全基于JSTL,而不是scriptlet做开发,这些在我看来就是对 ColdFusion的拙劣模仿。使用ColdFusion做开发的愉快感觉到了使用JSP就不存在了……

但是从上面这段话可以看出标签式的开发也不是一无是处的,李锟不也说 在当时ColdFusion的开发效率是最高的吗?其实我认为TagLib虽然已被普遍抛弃,但有些场景还是可以做到事半功倍的,用一下也未尝不可,而且,Grails的TagLib开发起来是非常的简单的,下面我给出一个小例子。

在Grails的应用的taglib目录下新建一个文件YhTagLib.groovy:
java 代码
  1. class YhTagLib{  
  2.   
  3.     def booklist = { attrs, body ->  
  4.         def i = Integer.valueOf( attrs["times"] )  
  5.   
  6.         def bs = Book.listOrderByName(max:i)  
  7.   
  8.         for(b in bs){  
  9.             body(b)  
  10.         }  
  11.     }  
  12. }  
其中,Book是我已经建好的一个domain类,它有一个name属性,然后我们在gsp文件中就可以这样使用这个TagLib了:
xml 代码
  1. <g:booklist times="10">      
  2.       <li>${it.name}li>     
  3. g:booklist>    

和开发一个JSP的TagLib相比,这是不是非常简单呢?也许有人说了,这有什么用呢?试想一下,如果我们做一个博客网站,把gsp作为用户可修改的模板,那用户就可以通过这些标签做出各种灵活多变的页面,换句话说,他们是在使用我们提供的标签编程。当然,在TagLib中直接操作数据也许会被认为是破坏了MVC结构,破坏了分层原则,但我认为在一些小型的应用中也无关紧要吧。


 


这篇关于用Grails的TagLib实现博客模板兼论TagLib是否应被一棍子打死的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923318

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换