自定义jsp标签

构成一个自己定义的标签需要3个步骤:

首先、一个标签的处理类

这个处理类需要继承SimpleTagSupport这个类,重写doTag方法

例子:


public class SimplePrimeTag extends SimpleTagSupport {
protected int length = 50;
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
BigInteger prime =
Primes.nextPrime(Primes.random(length));
out.print(prime);
}
}

其次、一个标签库描述文件

这是一个以TLD结尾的文件

例子:

<?xml version="1.0" encoding="UTF-8" ?>
<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">
<tlib-version>1.0</tlib-version>
<short-name>csajsp-taglib</short-name>
13
<tag>
<description>Outputs 50-digit primes</description>
<name>simplePrime</name>
<tag-class>coreservlets.tags.SimplePrimeTag</tag-class>
<body-content>empty</body-content>
</tag>
...
</taglib>

最后、在jsp页面中使用

例子:

<BODY>
<H1>Some 50-Digit Primes</H1>
<%@ taglib uri="/WEB-INF/tlds/csajsp-taglib.tld"
prefix="csajsp" %>
<UL>
<LI><csajsp:simplePrime/>
<LI><csajsp:simplePrime/>
<LI><csajsp:simplePrime/>
<LI><csajsp:simplePrime/>
</UL>
</BODY>
</HTML>


下面写一个带有自己属性的标签

首先、标签处理类

注意这个类继承了上面写的那个处理类SimplePrimeTag

package coreservlets.tags;
public class PrimeTag extends SimplePrimeTag {
public void setLength(String length) {
try {
this.length = Integer.parseInt(length);
} catch(NumberFormatException nfe) {
this.length = 50;
}
}
}


其次、TLD表述文件

<taglib ...>
...
<tag>
<description>Outputs an N-digit prime</description>
<name>prime</name>
<tag-class>coreservlets.tags.PrimeTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>length</name>
<required>false</required>
</attribute>
</tag>
...
</taglib>

最后、在jsp页面中使用

...
<BODY>
<H1>Some N-Digit Primes</H1>
<%@ taglib uri="/WEB-INF/tlds/csajsp-taglib.tld"
prefix="csajsp" %>
<UL>
<LI>20-digit: <csajsp:prime length="20"/>
<LI>40-digit: <csajsp:prime length="40"/>
<LI>80-digit: <csajsp:prime length="80"/>
<LI>Default (50-digit): <csajsp:prime/>
</UL>
</BODY>
</HTML>

一个带有标签体的jsp标签

处理类中需要有

public void doTag() throws ... {
JspWriter out = getJspContext().getOut();
out.print("...");
getJspBody().invoke(null);//这句话是打印标签体里面的内容
out.print("...");
}


TLD文件:

body-content里的不再是empty,注意比如标签体里是一个el表达式:如果不做修改原封不动的打印就用scriptless,如果想打印表达式的值需要用到tagdependent

<tag>
<name>…</name>
<tag-class>…</tag-class>
<body-content>scriptless</body-content>
</tag>




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值