`

支持动态属性的标签库

 
阅读更多

在以前版本的JSP环境中,我们必须为标签库中的每一个属性在标签库类中定义对应的getter/setter方 法。这种做法使我们无法根据实际的运行环境增加属性。为了解决这个在实际中经常遇见的问题,JSP2.0的标签库引入一个新特性——动态属性,该特性通过 接口javax.servlet.jsp.tagext.DynamicAttributes来实现,本文将通过一个简单的例子来介绍如何开发支持动态属 性的标签库。

首先描述一下这个简单的例子,我们实现一个把所有的属性值相加并输出相加的结果。接下来还是从标签库的三要素开始

1. 标签库实现类

支持动态属性的标签只需要在原来的基础上实现接口DynamicAttributes,并完成 setDynamicAttribute方法,代码如下

package javayou.taglib;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.DynamicAttributes;
import javax.servlet.jsp.tagext.TagSupport;

/**
* @author Winter Lau
* 演示支持动态属性的标签库
*/
public class NumberAddTag extends TagSupport implements DynamicAttributes {

private int total = 0;

public int doStartTag() throws JspException {
try{
pageContext.getOut().print(total);
}catch(IOException e){}
return EVAL_BODY_INCLUDE;
}
/*
* 该方法在接口DynamicAttributes中定义
* @see javax.servlet.jsp.tagext.DynamicAttributes#setDynamicAttribute(
* java.lang.String, java.lang.String, java.lang.Object)
*/
public void setDynamicAttribute(String uri, String localName, Object value)
throws JspException
{
total += Integer.parseInt(value.toString());
}

public void release() {
total = 0;
}
}

编译该类并将class文件拷贝至{webapp}/WEB-INF/classes/javayou /taglib目录下。

2. 标签库定义文件

接下来必须在标签的描述文件javayou.tld中为支持动态属性的标签设置dynamic- attributes属性,值为true,下面是本例中的配置

<?xml version="1.0" encoding="GB2312" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

<description>JavaYou Taglibs</description>
<display-name>JavaYou Demo Taglibs</display-name>
<tlib-version>1.1</tlib-version>
<short-name>demo</short-name>
<uri>http://www.javayou.com/dev/jsp</uri>

<tag>
<name>add</name>
<tag-class>javayou.taglib.NumberAddTag</tag-class>
<body-content>empty</body-content>
<dynamic-attributes>true</dynamic-attributes>
</tag>

</taglib>

把该文件保存在/WEB-INF目录下即可。

3. 使用标签库的页面

最后就是如何使用这个标签库的问题了,有两种办法来调用这个标签库,先来看看测试的页面代码add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="demo" uri="http://www.javayou.com/dev/jsp" %>

<demo:add a1="1" a2="2" a3="3" a4="4"/>
&nbsp;
<demo:add>
<jsp:attribute name="a1">1</jsp:attribute>
<jsp:attribute name="a2">2</jsp:attribute>
<jsp:attribute name="a3">3</jsp:attribute>
<jsp:attribute name="a4">4</jsp:attribute>
<jsp:attribute name="a5">5</jsp:attribute>
</demo:add>

在这个页面中的第一种调用方法中,我们给标签赋予几个属性,但是我们并没有在标签定义中定义这些属性,这就是动态属 性意思。JSP 2.0 新增了一个内置的标签jsp:attribute,你可以根据你的需要来选择具体采用何种方式,第二种方法适于动态的属性是由某些其它的标签所生成的值。

可以看到JSP 2.0在易用性上还是做了很多事情,比如这个动态属性就可大大的简化了开发过程

分享到:
评论

相关推荐

    JSP自定义标签动态属性支持

    自定义标签通常由两部分组成:标签库描述符(TLD)和标签处理类。TLD文件定义了标签的名称、属性、行为等元数据,而标签处理类则实现了这些行为,处理由JSP页面传递过来的参数和指令。 在描述中提到的"动态属性支持...

    JSP 标准标签库(c标签库)

    JSTL标签库常常与EL(Expression Language)一起使用,EL是一种轻量级的脚本语言,用于获取和设置JavaBean属性、集合元素等。在上面的例子中,`${yourVariable}`就是EL表达式。 4. **优点** 使用JSTL和C标签库,...

    Struts标签库 Struts 标签库

    Struts2标签库是Java开发Web应用程序时常用的一个强大工具,尤其在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。Struts2框架提供了丰富的自定义标签库,极大地简化了视图层的开发,使得开发者...

    JavaWeb-12:自定义标签库开发&JSTL标签库

    1. **创建TLD文件**:TLD(Tag Library Descriptor)文件是描述标签库的元数据文件,它定义了标签的名字、属性、返回类型等信息。例如: ```xml &lt;tlib-version&gt;1.0 &lt;jsp-version&gt;2.0 &lt;short-name&gt;myTags ...

    struts2标签库

    Struts2的标签库提供了一系列的JSP标签,使得开发者能够更方便地创建动态网页,提高代码的可读性和可维护性。在本讲解中,我们将深入探讨Struts2标签库的关键知识点,帮助大家更好地理解和应用。 首先,Struts2标签...

    JSP Struts之HTML标签库详解

    Struts标签库的一个重要特性是它们支持属性的嵌套引用,这意味着可以使用`.`来访问对象的深层属性,如`property="foo.bar.baz"`。此外,虽然设计初衷是避免使用scriptlet,但Struts标签仍能接受scriptlet表达式,...

    JSP标准标签库

    JSP标准标签库(JSTL)是为Java Server...为了解决这个问题,JSTL的后续版本开始支持资源动态定位,即将标签库的资源定位信息存储在单独的.tld文件中,并放到WEB-INF/tlds目录下,这样便于在不同的部署环境中进行更换。

    spring3标签库

    Spring3 MVC标签库是Spring框架中的重要组成部分,主要用于简化视图层(View Layer)的开发,尤其是基于JSP的Web应用。这两个主要的TLD(Tag Library Descriptor)文件——`spring-form.tld`和`spring.tld`,提供了...

    JSTL标准标签库

    JSTL主要由几个不同的标签库组成,包括核心标签库、SQL标签库、XML标签库以及函数标签库。 1. **核心标签库 (Core Tags):** 这个库定义了`cc.tld`,包含了用于常见任务的标签,如数据管理、流程控制和输出。主要...

    Struts标签库查询手册

    Struts 1和Struts 2都提供了丰富的标签库来帮助开发者高效地创建动态HTML页面。本查询手册将深入探讨Struts标签库的核心概念、使用方法以及常见问题。 1. **Struts标签库概述** - Struts标签库是Apache Struts框架...

    RichFaces_3.3.3标签库手册

    《RichFaces 3.3.3 标签库手册》是针对富客户端开发的重要参考资料,主要涵盖RichFaces组件库在3.3.3版本中的各种功能标签及其使用方法。这本手册以HTML化的方式呈现,方便开发者查阅和理解,旨在为JavaServer Faces...

    struts1标签库运用总结

    例如,通过bean标签库,我们可以方便地在JSP页面上操作属性,实现国际化;通过logic标签库,我们可以进行逻辑控制,避免过多的脚本代码;html标签库则简化了表单处理,提高了用户体验;而tiles库则帮助我们构建复杂...

    struts2标签库详解(非常不错)

    Struts2标签库API文档详细列出了每个标签的属性、用法和示例,帮助开发者理解如何有效利用这些标签。通过查阅`struts2-tags-API`文件,你可以找到每个标签的详细信息,包括它们的属性、标签体内容、默认行为等。此外...

    标签库.zip

    `jstl.jar`则是完整的JSTL库,除了`standard.jar`包含的核心标签库外,还包含了其他几个功能扩展库,如EL(Expression Language)支持、I18N(国际化)和JDBC操作等。EL是JSP 2.0引入的表达式语言,用于在页面中简便...

    JSP Struts的HTML标签库详解

    需要注意的是,虽然Struts标签库支持脚本表达式,但最佳实践是尽量减少脚本的使用,以保持页面的清晰度和可测试性。在实际开发中,结合使用Struts标签库和其他JavaServer Pages的JSTL标签,可以进一步提升代码质量。

    JSP核心标签库的使用,自己总结

    1. **标签库**:JSTL的标签库目前支持四种主要的标签集: - Core:提供JSP基础操作,如循环、条件判断、URL处理等。 - XML processing:用于XML文档的处理。 - I18N capable formatting:支持国际化和本地化格式...

    Struts配置及标签库详解

    在实际应用中,Struts还支持自定义标签库,开发者可以根据项目需求扩展功能,提高代码复用性。同时,Struts 2作为Struts的后续版本,引入了更多现代的特性,如OGNL表达式语言、拦截器等,提供了更灵活的配置和更强的...

    jsp标准标签库(各种标准标签库)

    ### JSP标准标签库(JSTL)详解 #### 6.1 JSTL简介 JSTL(JSP Standard Tag Library),即JSP标准标签库,是由Sun Microsystems提出并由Apache Jakarta组织维护的一种用于简化JSP开发的技术。JSTL提供了一套标准化...

Global site tag (gtag.js) - Google Analytics