自定义标签3

  给标签分配属性
   
标签属性的使用格式:

    <prefix:name attribute1=”value1” attribute2=”value2”… />

    使用标签的属性可以增加标签的灵活性。

1、           标签属性:标签处理程序类

提供对属性的支持是很简单的。使用称为 attribute1的属性只导致对在扩充了 TagSupport(否则实现 Tag接口)的类中的 setAttribute1方法的调用。因此,增加对 attribute1属性的支持只涉及实现以下方法:
public void setAttribute1(String value)
{
    doSomething(value);
}
请注意, attributeName(小写 a)属性对应于 setAttributeName(大写 A)方法。
静态值(即,在页转换是定义的那些)始终以 String类型提供给该方法。但是,可以使用 TLD文件中的 rtexprvaluetype元素是其他类型的属性被动态计算。
在属性处理程序中要做的最常见的事情之一就是在一个字段中存储该属性,以便今后由 doStartTag或类似的方法使用。例如,以下是一个标签实现的一部分,它增加对 message属性的支持。
private String message=”Default Message”;
public void setMessage(String message)
{
    This.message=message;
}
如果标签处理程序从其他类中访问,则除了 setArrtibuteName方法外,提供 getAttributeName方法是个好主意。但是, setAttributeName是必需的。
程序清单 3-1给出 SimplePrimeTag的一个字类,它增加了对 length属性的支持。当这样的属性被提供时,他引起对 setLength方法的调用,该方法将 String类型的输入转换成 int值,并存储在已经由父类中的 doStartTag方法使用的 len字段中。
 
程序清单 3-1       PrimeTag.java
package moreservlets.tags;
/**Generates an N - digit random prime (default N=50).
  * Extends SimplePirmeTag,adding a length attribute
  * to set the size of the parent class uses the len field
  * to determine the length ofthe prime.
  */
public class PrimeTag extends SimplePrimeTag
{
    public void setLength(String length)
    {
       try
       {
           len =Integer.parseInt(length);
       } catch (NumberFormatException nfe)
       {
           len =50;
       }
    }
}
 

2、             标签属性:标签库描述符文件

标签属性必须在 tag元素中通过一个 attribute元素声明。 Attrigute元素有五个嵌入的元素,出现在 <attribute></attribute>之间。
1) name 必需的元素,定义大小敏感的属性名。在此,我们使用:
<name> length </name>
2) required 必需的元素,约定该属性是始终被提供的( true,或是可选的( false)。在这里,为了表明 length是可选的,我们使用:
<required> false </required>
如果 requiredfalsejsp页省略了该属性,则不产生对 setAttirbuteName方法的任何调用。因此,要确保向字段提供该方法设置的缺省值。忽略必需的属性将导致页转换时的错误。
3) rtexprvalue 可选的元素,表明该属性值是 <%= expression %>这样的 jsp表达式( true,还是为固定串( false)。其缺省值为 false,因此,除非你想要使属性具有在请求是确定的值,否则该元素通常被省略。
4) type 可选的元素,它指明该类型之所构造的类。只有当 rtexprvaluetrue时指定 type才是合法的。
5) example 可选的元素,它提供了如何使用该标签的例子。此元素是对对开发环境的,因此对执行无任何影响,它只在 jsp1.2中有效。
程序清单 3-2给出了在标记库描述符文件中的相应的 tag元素。除提供一个 attribute元素来描述 length元素外, tag元素还包含了标准 name(prime),tag-class(moreservlets.tags.PrimeTag)body-content(empty)description(短描述 )元素。
 
程序清单 3-2       msajsp-taglib.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib

        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
 
<taglib>
 
 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>msajsp-tags</short-name>
 <description>

    A simple tab for the examples

 </description>
 
 <tag>

    <name>example</name>

    <tag-class>moreservlets.tags.ExampleTag</tag-class>

    <body-content>empty</body-content>

    <description> Output some strings </description>   

 </tag>  
 
 <tag>

    <name>simplePrime</name>

    <tag-class>moreservlets.tags.SimplePrimeTag</tag-class>

    <body-content>empty</body-content>

    <description> Generates primes </description>   

 </tag> 
 
 <tag>
    <name>prime</name>

    <tag-class>moreservlets.tags.PrimeTag</tag-class>

    <body-content>empty</body-content>

    <description> Generates some primes </description>   

    <attribute>
        <name>length</name>
        <required>false</required>
    </attribute>
 </tag>

     

 </taglib>
 
 
 

3、           标签属性:jsp文件

程序清单 3-3给出一个 jsp文档,该文档使用 taglib指令装在标签库描述文件并指定 msajsp前缀。由于 prime标签被定义为允许使用 length属性值,则程序清单 3-3使用:
    <msajsp:prime length=”XXX” />
请记住,定制的标签遵循 xml语法,要求属性值被括在单引号或双引号中。同样,由于 length属性不是必须的,因此可以只使用:
    <msajsp:prime />
 在这种情况下标签处理程序负责使用合理的缺省值。
程序清档 3-3       PrimeExample.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">

 
<html>

    <head>

    <%@ taglib uri="msajsp-taglib.tld" prefix="msajsp" %>

    <title>Some N-Digit Prime</title>   

    <body>

    <H1>Some N-Digit Prime</H1>

    <UL>

    <LI>20-digit: <msajsp:prime length="20" />

    <LI>40-digit: <msajsp:prime length="40" />

    <LI>80-digit: <msajsp:prime length="80" />

    <LI>Default(50-digit): <msajsp:prime />

    </UL>

    </body>

</html>
部署文件,在浏览器中输入 :
localhost:8080/simpletag/PrimeExample.jsp 回车即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值