`
zuiyanwangyue
  • 浏览: 167164 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

从Displaytag的ColumnDecorator看接口易变性对用户造成的伤害

阅读更多

众所周知,Displaytag从1.0升级到1.1之后对列修饰器的接口做了改进,在1.1及其后续版本中ColumnDecorator已经不推荐使用,以DisplaytagColumnDecorator替代之,我们可以看到,这两个接口之间的主要不同是集中在接口的decorate方法所接受的参数上,这两个接口中decorate方法的原型分别是:

ColumnDecorator:String decorate(Object columnValue) throws DecoratorException;

DisplaytagColumnDecorator:Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum media) throws DecoratorException;

至于DisplaytagColumnDecorator中decorate方法的返回类型也和原来不同主要是为了支持链模式,我们在此不予讨论,我想说的是因为传参的不同而使得接口改变说明了Displaytag在设计上的缺陷。假如以后Displaytag的设计者发现列修饰器类在完成其工作时依然需要其余的参数呢,是不是还要再设计一个Displaytag2ColumnDecorator同事废止DisplaytagColumnDecorator呢?这绝不是危言耸听。

还是从JSR的某些API中吸取点经验吧,把decorate方法的参数设计成某个单独的类是不是会更好呢?在Servlet或者JSP规范中经常会见到XxxContext的概念,我个人认为这是一种好办法。假想一下,如果当初Displaytag的ColumnDecorator中的decorate方法的原型设计成下面这样:

Object decorate(DecoratorContext _context) throws DecoratorException;

情况可能就会好的多,当然在它的1.0版本中DecoratorContext的定义可能看起来是下面这样。

public final class DecoratorContext{
	private Object decoratedValue;
	public Object getDecoratedValue() {
		return decoratedValue;
	}

	public void setDecoratedValue(Object decoratedValue) {
		this.decoratedValue = decoratedValue;
	}
} 

ColumnDecorator的实现类可以通过上下文环境获得要装饰的对象: Object value=_context.getDecoratedValue(); 重要的是假如到了1.1版本,我们可以完全不用改变ColumnDecorator接口本身而直接对DecoratorContext进行升级,这时的DecoratorContext看起来是下面这样。

public final class DecoratorContext{
	private Object decoratedValue;
	private PageContext pageContext;
	private MediaTypeEnum media;
	
	//Getters and Setters
	……
} 

如此一来使用1.1版本的用户可以轻松的通过这个上下文环境获取到PageContext或者MediaTypeEnum,而同时又不会伤害到使用旧版本的用户,也就是说旧版本的用户在进行升级时,如果有哪个已存在的列装饰器的实现想要在工作的过程中使用PageContext的话它不必再修改自己所要实现的接口了,让DisplaytagColumnDecorator去见鬼吧。

当然DecoratorContext对象中各个属性的赋值工作是框架本身完成的,使用Displaytag的开发者完全不必担心这一点。

The article is end.

分享到:
评论

相关推荐

    displaytag-1.1 源码

    7. `displaytag`: 最后,这个目录很可能包含了Displaytag的核心源码,包括了所有处理表格渲染、数据处理和用户交互的类和接口。 通过深入研究这些源码,开发者可以了解到Displaytag如何处理大数据分页,以及它是...

    displaytag及使用方法

    DisplayTag的强大之处在于其灵活性和可扩展性,可以根据项目需求进行定制,提高开发效率,同时保持代码的清晰和维护性。在实际应用中,了解并熟练掌握DisplayTag的这些用法,能大大提升Web应用的用户体验。

    displaytag分页和鼠标经过变色功能

    Displaytag 是一个强大的开源Java库,用于创建复杂的HTML表格,包括分页、排序、过滤等功能。...这种方式不仅保持了Displaytag 的升级兼容性,也展示了在Web开发中利用现有工具进行功能扩展的灵活性。

    displayTag1.2

    1. **多列排序**:DisplayTag允许用户对表格的任意列进行升序或降序排序,提升了用户体验。 2. **分页**:它可以自动处理数据分页,减轻服务器压力,同时在页面上显示页码和跳转选项。 3. **国际化与本地化**:...

    displaytag标签的使用

    总之,DisplayTag 是 JSP 开发中处理表格数据的强大工具,它的易用性和灵活性使得网页表格的开发变得更加高效和便捷。通过合理利用 DisplayTag,开发者可以将更多精力集中在业务逻辑上,而不是繁琐的页面布局和交互...

    displaytag的使用指南(全)

    ### DisplayTag 使用指南详解 #### 一、简介 DisplayTag 是一个开源的 Java Web 标签库,主要用于处理数据表格的展示与交互。它能够帮助开发者轻松地将 JavaBean 集合转换成 HTML 表格,并且支持排序、分页等功能...

    自己整理的DisplayTag标签的使用

    DisplayTag作为一款功能强大的标签库,为JSP页面上的Table提供了丰富的处理手段,包括分页、数据导出、分组、列排序等特性,极大地简化了开发者的工作流程,提升了数据展示的灵活性和用户体验。 #### DisplayTag...

    displaytag-1.2-bin&displaytag-1.2-src Java分页组件/插件

    "displaytag-1.2-src"则是DisplayTag 1.2版本的源代码包,对于想要深入了解其工作原理或者希望对其进行定制的开发者来说非常有用。源代码包允许开发者查看和修改DisplayTag的源代码,以便扩展其功能或者修复可能存在...

    displaytag标签使用

    - 默认情况下,DisplayTag 从 `requestScope` 获取数据。但你可以指定其他范围,如 `pageScope`, `sessionScope`, 和 `applicationScope`。例如,从`sessionScope`获取数据: ```jsp ``` 5. **隐含对象与行号*...

    DisplayTag应用

    DisplayTag 是一个强大的开源标签库,专为 Java Web 开发设计,主要用于在 MVC 模式下展示表格数据。它的特点是功能丰富,易于使用,并且高度可定制化,能够帮助开发者快速构建美观的数据展示页面。DisplayTag 支持...

    用JavaScript操作displayTag表头操作

    JavaScript在网页动态效果和用户交互方面起着关键作用,因此,对于DisplayTag这样复杂的表格组件,理解如何通过JavaScript进行定制和控制是非常重要的。 以下是一些可能涉及的知识点: 1. **DisplayTag介绍**:...

    displaytag,pager-taglib 分页包

    Displaytag和Pager-taglib是两个在Java Web开发中常用的分页库,主要用于处理大量数据的显示,提升用户体验,减轻服务器压力。这两个库都是基于JSP标签库(Tag Library)实现的,可以方便地集成到Spring、Struts等...

    displaytag详细用法(中文问题已解决)

    总的来说,DisplayTag是一个强大的表格标签库,它简化了Web应用中表格的开发,同时提供了丰富的功能和高度的可定制性。通过解决中文问题并配合合适的编辑器插件,开发者可以更高效地利用DisplayTag构建出满足需求的...

    displaytag简单项目

    5. **国际化支持**:DisplayTag内置了对多语言的支持,方便在不同地区部署的应用程序。 6. **导出功能**:可以将表格数据导出为CSV、Excel、PDF等格式,便于数据分析或打印。 在这个"displaytag简单项目"中,你...

    displaytag简单实例

    3. **排序**:用户可以通过点击表头对数据进行排序,DisplayTag会处理排序逻辑并重新加载页面以显示新顺序。这极大地提高了用户体验。 4. **下载功能**:DisplayTag支持导出表格数据到各种格式,如CSV、Excel或PDF...

    displaytag 一个后台管理的分页组件

    DisplayTag 提供了丰富的定制选项,使得表格的格式化、排序、分页以及国际化等功能变得轻而易举。 Displaytag 的核心特性包括: 1. **表格呈现**:DisplayTag 可以轻松地将数据集(如List、Map或数组)渲染成HTML...

    displaytag的使用方法

    首先,你需要从官方或者其他可靠的来源下载 `displaytag-1.1-bin.zip` 文件。解压后,将 `displaytag-examples-1.1.war` 中的 `WEB-INF/lib` 目录下的所有类库文件(jar 包)复制到你的 Web 应用程序的 `WEB-INF/lib...

    displaytag-1.2.jar

    displaytag-1.2.jar 显示标签

Global site tag (gtag.js) - Google Analytics