我们可以使用IterationTag接口的doAfterBody()方法来迭代任何标签的主体内容。
【使用JSP自定义标签进行迭代】在这里, 我们将使用实现IterationTag接口的TagSupport类。为了迭代主体内容, 我们需要在doAfterBody()方法中使用EVAL_BODY_AGAIN常量。
使用JSP自定义标签进行迭代的示例
在此示例中, 我们将在自定义标签中使用属性, 该属性返回任何给定数字的幂。我们在这里创建了三个文件
- index.jsp
- PowerNumber.java
- mytags.tld
<
%@ taglib uri="WEB-INF/mytags.tld" prefix="m" %>
3 ^ 5 = <
m:power number="3" power="5">
body
<
/m:power>
PowerNumber.java
package com.srcmini.taghandler;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class PowerNumber extends TagSupport{
private int number;
private int power;
private static int counter;
private static int result=1;
public void setPower(int power) {
this.power = power;
}public void setNumber(int number) {
this.number = number;
}public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;
}public int doAfterBody() {
counter++;
result *= number;
if (counter==power)
return SKIP_BODY;
else
return EVAL_BODY_AGAIN;
} public int doEndTag() throws JspException {
JspWriter out=pageContext.getOut();
try{
out.print(result);
}catch(Exception e){e.printStackTrace();
}
return EVAL_PAGE;
}
}
mytags.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>
simple<
/short-name>
<
uri>
http://tomcat.apache.org/example-taglib<
/uri>
<
description>
A simple tab library for the examples<
/description>
<
tag>
<
name>
power<
/name>
<
tag-class>
com.srcmini.taghandler.PowerNumber<
/tag-class>
<
attribute>
<
name>
number<
/name>
<
required>
true<
/required>
<
/attribute>
<
attribute>
<
name>
power<
/name>
<
required>
true<
/required>
<
/attribute>
<
/tag>
<
/taglib>
使用迭代标签进行循环(为循环创建标签)
让我们创建一个循环标签, 以循环访问此标签的主体内容。
<
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
title>
Insert title here<
/title>
<
/head>
<
body>
<
%@taglib prefix="m" uri="sssuri" %>
<
m:loop end="5" start="1">
<
p>
My Name is khan<
/p>
<
/m:loop>
<
/body>
<
/html>
<
?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>
abc<
/short-name>
<
uri>
sssuri<
/uri>
<
tag>
<
name>
loop<
/name>
<
tag-class>
com.srcmini.customtag.Loop<
/tag-class>
<
attribute>
<
name>
start<
/name>
<
required>
true<
/required>
<
/attribute>
<
attribute>
<
name>
end<
/name>
<
required>
true<
/required>
<
/attribute>
<
/tag>
<
/taglib>
package com.srcmini.customtag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class Loop extends TagSupport{
private int start=0;
private int end=0;
public void setStart(int start) {
this.start = start;
}
public void setEnd(int end) {
this.end = end;
}
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;
} @Override
public int doAfterBody() throws JspException {
if(start<
end){
start++;
return EVAL_BODY_AGAIN;
}else{
return SKIP_BODY;
} }
}
<
?xml version="1.0" encoding="UTF-8"?>
<
web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<
jsp-config>
<
taglib>
<
taglib-uri>
sssuri<
/taglib-uri>
<
taglib-location>
/WEB-INF/mytags.tld<
/taglib-location>
<
/taglib>
<
/jsp-config>
<
/web-app>
输出量
文章图片
推荐阅读
- JSP JavaBean
- JSP中的异常处理
- JSP自定义标签示例
- JSP中的表达语言(EL)
- 使用JSP从服务器下载文件的示例
- 在JSP中显示小程序(jsp(plugin操作标记))
- JSP自定义标签中的自定义URI
- JSP中的自定义标签
- JSP CRUD示例