JSP 自定义标签---动态属性标签

动态属性标签比普通标签有两个额外的要求:

1.标签处理类还需要实现DynamicAttributes 接口;

2.添加<dynamic-attributes>节点 指定该标签支持动态属性;

DynaAttributesTag.java 代码:

public class DynaAttributesTag
extends SimpleTagSupport implements DynamicAttributes

{
// 保存每个属性名的集合
private ArrayList<String> keys = new ArrayList<String>();
// 保存每个属性值的集合
private ArrayList<Object> values = new ArrayList<Object>();

@Override
public void doTag() throws JspException, IOException
{
JspWriter out = getJspContext().getOut();
// 此处只是简单地输出每个属性
out.println("<ol>");
for( int i = 0; i < keys.size(); i++ )
{
String key = keys.get( i );
Object value = values.get( i );
out.println( "<li>" + key + " = " + value + "</li>" );
}
out.println("</ol>");
}

@Override
public void setDynamicAttribute( String uri, String localName,
Object value )throws JspException
{
// 添加属性名
keys.add( localName );
// 添加属性值
values.add( value );
}
}

配置标签:

<!-- 定义接受动态属性的标签 -->
<tag>
<name>dynaAttr</name>
<tag-class>com.yd.tag.DynaAttributesTag</tag-class>
<body-content>empty</body-content>
<!-- 指定支持动态属性 -->
<dynamic-attributes>true</dynamic-attributes>
</tag>


dynaAttributesTag.jsp 代码:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!-- 导入标签库,指定mytag前缀的标签,
由http://www.crazyit.org/mytaglib的标签库处理 -->
<%@ taglib uri="http://www.zyd.org/mytaglib" prefix="mytag"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>自定义标签示范</title>
<meta name="website" content="http://www.crazyit.org" />
</head>
<body bgcolor="#ffffc0">
<h2>下面显示的是自定义标签中的内容</h2>
<h4>指定两个属性</h4>
<mytag:dynaAttr name="zyd" url="zyd.org"/><br/>
<h4>指定四个属性</h4>
<mytag:dynaAttr 书名="Java讲义" 价格="77.0"
出版时间="2008年" 描述="Java图书"/><br/>
</body>
</html>


总结: <mytag:dynaAttr..../> 比较灵活,可以根据需要动态的传入任意的多个属性,效果如下:

你可能感兴趣的:(jsp,标签)