标签属性的使用格式:
<prefix:name attribute1=”value1” attribute2=”value2”… />
使用标签的属性可以增加标签的灵活性。
1、
标签属性:标签处理程序类
提供对属性的支持是很简单的。使用称为
attribute1的属性只导致对在扩充了
TagSupport(否则实现
Tag接口)的类中的
setAttribute1方法的调用。因此,增加对
attribute1属性的支持只涉及实现以下方法:
public void setAttribute1(String value)
{
doSomething(value);
}
请注意,
attributeName(小写
a)属性对应于
setAttributeName(大写
A)方法。
静态值(即,在页转换是定义的那些)始终以
String类型提供给该方法。但是,可以使用
TLD文件中的
rtexprvalue和
type元素是其他类型的属性被动态计算。
在属性处理程序中要做的最常见的事情之一就是在一个字段中存储该属性,以便今后由
doStartTag或类似的方法使用。例如,以下是一个标签实现的一部分,它增加对
message属性的支持。
private String message=”Default Message”;
public void setMessage(String message)
{
This.message=message;
}
如果标签处理程序从其他类中访问,则除了
setArrtibuteName方法外,提供
getAttributeName方法是个好主意。但是,
setAttributeName是必需的。
程序清单
3-1给出
SimplePrimeTag的一个字类,它增加了对
length属性的支持。当这样的属性被提供时,他引起对
setLength方法的调用,该方法将
String类型的输入转换成
int值,并存储在已经由父类中的
doStartTag方法使用的
len字段中。
程序清单
3-1 PrimeTag.java
package
moreservlets.tags;
/**Generates
an
N
-
digit
random
prime
(default
N=50).
*
Extends
SimplePirmeTag,adding
a
length
attribute
*
to
set
the
size
of
the
parent
class
uses
the
len
field
*
to
determine
the
length
ofthe
prime.
*/
public
class
PrimeTag
extends
SimplePrimeTag
{
public
void
setLength(String length)
{
try
{
len
=Integer.parseInt(length);
}
catch
(NumberFormatException nfe)
{
len
=50;
}
}
}
2、
标签属性:标签库描述符文件
标签属性必须在
tag元素中通过一个
attribute元素声明。
Attrigute元素有五个嵌入的元素,出现在
<attribute>和
</attribute>之间。
1)
name 必需的元素,定义大小敏感的属性名。在此,我们使用:
<name> length </name>
2)
required 必需的元素,约定该属性是始终被提供的(
true)
,或是可选的(
false)。在这里,为了表明
length是可选的,我们使用:
<required> false </required>
如果
required为
false且
jsp页省略了该属性,则不产生对
setAttirbuteName方法的任何调用。因此,要确保向字段提供该方法设置的缺省值。忽略必需的属性将导致页转换时的错误。
3)
rtexprvalue 可选的元素,表明该属性值是
<%= expression %>这样的
jsp表达式(
true)
,还是为固定串(
false)。其缺省值为
false,因此,除非你想要使属性具有在请求是确定的值,否则该元素通常被省略。
4)
type 可选的元素,它指明该类型之所构造的类。只有当
rtexprvalue为
true时指定
type才是合法的。
5)
example 可选的元素,它提供了如何使用该标签的例子。此元素是对对开发环境的,因此对执行无任何影响,它只在
jsp1.2中有效。
程序清单
3-2给出了在标记库描述符文件中的相应的
tag元素。除提供一个
attribute元素来描述
length元素外,
tag元素还包含了标准
name(prime),tag-class(moreservlets.tags.PrimeTag)、
body-content(empty)和
description(短描述
)元素。
程序清单
3-2 msajsp-taglib.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>msajsp-tags</short-name>
<description>
A simple tab for the examples
</description>
<tag>
<name>example</name>
<tag-class>moreservlets.tags.ExampleTag</tag-class>
<body-content>empty</body-content>
<description> Output some strings </description>
</tag>
<tag>
<name>simplePrime</name>
<tag-class>moreservlets.tags.SimplePrimeTag</tag-class>
<body-content>empty</body-content>
<description> Generates primes </description>
</tag>
<tag>
<name>prime</name>
<tag-class>moreservlets.tags.PrimeTag</tag-class>
<body-content>empty</body-content>
<description> Generates some primes </description>
<attribute>
<name>length</name>
<required>false</required>
</attribute>
</tag>
</taglib>
3、
标签属性:jsp文件
程序清单
3-3给出一个
jsp文档,该文档使用
taglib指令装在标签库描述文件并指定
msajsp前缀。由于
prime标签被定义为允许使用
length属性值,则程序清单
3-3使用:
<msajsp:prime length=”XXX” />
请记住,定制的标签遵循
xml语法,要求属性值被括在单引号或双引号中。同样,由于
length属性不是必须的,因此可以只使用:
<msajsp:prime />
在这种情况下标签处理程序负责使用合理的缺省值。
程序清档
3-3 PrimeExample.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
<html>
<head>
<%@ taglib uri="msajsp-taglib.tld" prefix="msajsp" %>
<title>Some N-Digit Prime</title>
<body>
<H1>Some N-Digit Prime</H1>
<UL>
<LI>20-digit: <msajsp:prime length="20" />
<LI>40-digit: <msajsp:prime length="40" />
<LI>80-digit: <msajsp:prime length="80" />
<LI>Default(50-digit): <msajsp:prime />
</UL>
</body>
</html>
部署文件,在浏览器中输入
:
localhost:8080/simpletag/PrimeExample.jsp
回车即可。