`
zhangziyangup
  • 浏览: 1065712 次
文章分类
社区版块
存档分类
最新评论

自定义JSP中的Taglib标签之五自定义标签之SimpleTagSupport使用

 
阅读更多

Simple的生命周期:

1.在jsp中使用这个标签的实例后,调用setJspContext()

2.调用setParent():这个方法是在有标签嵌套的情况下调用

3.setters

4.setJspBody():如果标签体有body,调用此方法

5.doTag():所有的标签逻辑,业务计算,迭代都在这里实现

6.doTag() return的时候锁定属性值

和1TagSupport.2BodyTagSupport的区别:

没有doS,doE方法

doTag()只调用一次

没有标签池,每次再用的话需要从新创建

在body中不能有表达式

API:

SimpleTag接口和SimpleTagSupport实现类

引例1:

程序目标:有if功能的自定义标签

知识点:

1.JspFragment对象,原始body

2.getJspBody()将得到body

3.invoke(null):body的方法,执行body

4.tld的写法:在<body-content>中写scriptless

java类:

package yuchen.ctab.simpleTag.s1;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.*;

public class SimpleIf extends SimpleTagSupport{

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>private boolean cond;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>public void setCond(boolean cond) {</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>this.cond = cond;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>@Override</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>public void doTag() throws JspException, IOException {</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>// TODO Auto-generated method stub</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>JspFragment body=getJspBody();//原始body</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>if(this.cond){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>getJspBody().invoke(null);//执行body</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

}

tld:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib

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

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>"<a href="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd</a>"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<taglib>

<wbr><wbr><wbr><wbr>&lt;tlib-version&gt;1.0&lt;/tlib-version&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;jsp-version&gt;2.0&lt;/jsp-version&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;short-name&gt;simpleif&lt;/short-name&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;uri&gt;/mysimpleif&lt;/uri&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;tag&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;name&gt;if&lt;/name&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;tag-class&gt;yuchen.ctab.simpleTag.s1.SimpleIf&lt;/tag-class&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;body-content&gt;scriptless&lt;/body-content&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;attribute&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;name&gt;cond&lt;/name&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;required&gt;true&lt;/required&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;/attribute&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;/tag&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

</taglib>

jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

<wbr><wbr><wbr><wbr>pageEncoding="ISO-8859-1"%&gt;</wbr></wbr></wbr></wbr>

<%@taglib prefix="mysimpleif" uri="/mysimpleif" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<wbr><wbr><wbr><wbr><wbr>&lt;mysimpleif:if cond="true"&gt;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world!</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>&lt;/mysimpleif:if&gt;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>&lt;mysimpleif:if cond="false"&gt;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world!</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>&lt;/mysimpleif:if&gt;</wbr></wbr></wbr></wbr></wbr>

</body>

</html>

引例2:

带有while循环功能的标签

知识点:

doTag方法只执行一次

invoke(null)null为默认的输出流,相当于getJspContext().getOut()

java类:

package yuchen.ctab.simpleTag.s2;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.*;

public class SimpleWhile extends SimpleTagSupport{

<wbr><wbr><wbr><wbr><wbr>private int counts;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>public void setCounts(int counts) {</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>this.counts = counts;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>@Override</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>public void doTag() throws JspException, IOException {</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>// TODO Auto-generated method stub</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>JspFragment body=getJspBody();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>for(int i=0;i&lt;this.counts;i++){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>body.invoke(null);//null为默认的输出流,相当于</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//getJspContext().getOut()</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

}

tld:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib

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

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>"<a href="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd</a>"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<taglib>

<wbr><wbr><wbr><wbr>&lt;tlib-version&gt;1.0&lt;/tlib-version&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;jsp-version&gt;2.0&lt;/jsp-version&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;short-name&gt;simplewhile&lt;/short-name&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;uri&gt;/mysimplewhile&lt;/uri&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;tag&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;name&gt;loop&lt;/name&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;tag-class&gt;yuchen.ctab.simpleTag.s2.SimpleWhile&lt;/tag-class&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;body-content&gt;scriptless&lt;/body-content&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;attribute&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;name&gt;counts&lt;/name&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;required&gt;true&lt;/required&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>&lt;/attribute&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>&lt;/tag&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>

</taglib>

jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

<wbr><wbr><wbr><wbr>pageEncoding="ISO-8859-1"%&gt;</wbr></wbr></wbr></wbr>

<%@taglib prefix="mysimplewhile" uri="/mysimplewhile" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<wbr><wbr><wbr><wbr><wbr>&lt;mysimplewhile:loop counts="5"&gt;</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world&lt;br&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>&lt;/mysimplewhile:loop&gt;</wbr></wbr></wbr></wbr></wbr>

</body>

</html>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics