JSP2.0标签库新特性 —— 动态属性

JSP2.0的标签库引入一个新特性——动态属性,该特性通过接口javax.servlet.jsp.tagext.DynamicAttributes来实现。实现该接口需要实现setDynamicAttribute()方法,该方法用于接收动态属性。使用动态属性这个新特性后,标签类对应属性的get、set方法就可以去掉了,tld文件也可以去掉相应的属性配置。

 

如果需要使用JSP2语法,其web.xml文件必须使用Servlet 2.4以上版本的配置文件。

 

1、标签类TestTag的源码:

public class TestTag extends BodyTagSupport implements DynamicAttributes {
	private User user;
	
	public TestTag(){
		this.user = new User();
	}
	
	public void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
		try{
			//此处获取动态属性名和值
			BeanUtils.setProperty(user, localName, value);
		}catch(IllegalAccessException e){
			throw new JspException("该UI不存在该属性");
		}catch(InvocationTargetException e){
			throw new JspException("该UI不存在该属性");
		}
	}
	
	public User getUser() {
		return user;
	}
	
	public void setUser(User user) {
		this.user = user;
	}
}

 

2、自定义标签在标签库描述符文件中的声明:

     dynamic-attributes参数设置为true就是表示该标签支持动态属性特性。

<tag>
	<name>test</name>
	<tag-class>com.cjm.web.tag.TestTag</tag-class> 
	<dynamic-attributes>true</dynamic-attributes>  
</tag>

 

3、自定义标签的使用:

<%@ taglib prefix="cjm" uri="/WEB-INF/cjm.tld"%>

<cjm:test p1="v1" p2="v2"/> <!-- p1、p2标签属性在标签类和描述符文件中都没有定义 -->
  	
<cjm:test>
	<jsp:attribute name="uid" trim="true"><%=request.getParameter("uid")%></jsp:attribute>
	<jsp:attribute name="pwd" trim="true"><%=request.getParameter("pwd")%></jsp:attribute>
</cjm:test>

    

你可能感兴趣的:(jsp,UI,xml,Web,servlet)