使用JSP自定义标签进行迭代

我们可以使用IterationTag接口的doAfterBody()方法来迭代任何标签的主体内容。
【使用JSP自定义标签进行迭代】在这里, 我们将使用实现IterationTag接口的TagSupport类。为了迭代主体内容, 我们需要在doAfterBody()方法中使用EVAL_BODY_AGAIN常量。
使用JSP自定义标签进行迭代的示例
在此示例中, 我们将在自定义标签中使用属性, 该属性返回任何给定数字的幂。我们在这里创建了三个文件

  • index.jsp
  • PowerNumber.java
  • mytags.tld
index.jsp
< %@ 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自定义标签进行迭代

文章图片

    推荐阅读