自定义jsp标签

来源:互联网 发布:淘宝如何看价格趋势图 编辑:程序博客网 时间:2024/05/20 15:41

构成一个自己定义的标签需要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/j2eehttp://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>




原创粉丝点击