首页 / 网页编程 / JSP / JSP最佳实践: 为您的JSP标记创建自定义属性
JSP最佳实践: 为您的JSP标记创建自定义属性2011-08-17 IBM Brett McLaughlin简介:BrettMcLaughlin 继续他的 JSP 最佳实践系列,这次他将用一个属性来扩展自定义的时间戳标 记( lastModified ),这个属性让页面作者可以选择他们自己的时间戳格式。上一期的 JSP 最佳实践介绍了在JSP页面中使用自定义标记库的基础知识。在那一期可以学到如何定 义简单的标记并通过标记库描述符(tag library descriptor,TLD)让其他 JSP 作者可以使用该标记。 在这个星期,我们将以您已经知道的有关自定义标记的知识为基础。我们上次采用的实例标记非常简单, 还存在一些不足之处。因此,现在我们将通过自定义属性来扩展该标记的功能性。关于该实例的一点注解:本期的所有实例代码都建立在 上次我们开发的 lastModified 标记的基础之 上。如果您还没有完整阅读上一期,那么在继续阅读本期之前您应该回头阅读一下上一期。自定义“Hello, world”JSP 标记最常见的需求就是能够接受来自某个页面(或者页面作者)的数据,并响应该数据。标记 attributes 允许我们将这种功能性融入到自定义标记中。举个非常简单的例子,比如典型的“Hello, world”应用程序。很容易想象实现这一 scriptlet 的 功能性的自定义标记是什么样子,但是,对这个标记作一点点扩展如何?在清单 1 中我们可以看到一个 JSP 页面片段,其中有一个典型的“Hello, world!”标记,但是这 个标记包括了一个名为 name 的属性。清单 1. 一个简单的 "Hello, world!" 标记<p>
<examples:hello name="Reader" />
</p>
name 属性为页面作者将数据提供给 hello 标记创造了空间,在这个例子中,所提供的数据是一个人 的名称,应用程序将把它的消息转播给这个人。实际上,我们已经自定义了“Hello, world” ―― 但 我们是怎样进行定义的呢?清单 2 显示了用于实现 hello 标记的 Java 代码 :清单 2. hello 标记的代码package com.ibm.examples;
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class HelloTag extends TagSupport {
// The "person" to say hello to
private String name;
// Accept the attribute data
public void setName(String name) {
this.name = name;
}
public int doEndTag() {
try {
StringBuffer message = new StringBuffer("Hello, ");
message.append(name)
.append("!");
pageContext.getOut().println(message.toString());
} catch (IOException ignored) { }
return EVAL_PAGE;
}