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

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

 

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

 

1、标签类TestTag的源码:

Java代码
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;  
    }  

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就是表示该标签支持动态属性特性。

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

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

3、自定义标签的使用:

Html代码
<%@ 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> 

<%@ 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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值