`
raymond.chen
  • 浏览: 1418661 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

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>

    

分享到:
评论
1 楼 907121461 2014-07-04  
你好 在吗 我使用spring-form的标签库 我看他的标签是支持动态属性的 ,这个项目在tomcat下运行正常,tomcat7下运行就报错 提示属性无效了

相关推荐

Global site tag (gtag.js) - Google Analytics