使用此接口完成动态属性的设置:
之前的所有的属性如果需要,则必须在<tag>文件中使用<attribute>的节点进行定义,但是如果现在
属性不是固定的,可以用用户自己任意设置的话,就可以使用DynamicAttributes接口实现。
package tag.lid.dynamictag;
import java.util.*;
import java.text.*;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class DynamicAddTag extends SimpleTagSupport implements DynamicAttributes{
private Map<String,Float> num = new HashMap<String,Float>();
public void doTag() throws JspException,IOException{
Float sum=0.0f;
Iterator<Map.Entry<String,Float>> iter=this.num.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String,Float> value=iter.next();
sum+=value.getValue();
}
super.getJspContext().getOut().write(sum+"");
}
public void setDynamicAttribute(String uri,String localName,Object value) throws JspException{
//取出设置的每一个动态属性,都保存在Map集合里
num.put(localName,Float.parseFloat(value.toString()));
}
}
定义标签的描述文件:
<tag>
<name>add</name>
<tag-class>
tag.lid.dynamictag.DynamicAddTag
</tag-class>
<body-content>empty</body-content>
<dynamic-attributes>true</dynamic-attributes>
</tag>
jsp页面:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@ taglib prefix="mytag" uri="lid"%>
<html>
<head><title>这是测试</title></head>
<body>
<mytag:add num1="32.1" num2="12.4" num3="12.3"/>
</body>
</html>