李送球2010-03-28
步骤如下
1. 扩张TagSupport
package com.meliora.mytag.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class MyTag extends TagSupport {
private static final long serialVersionUID = 1L;
boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public int doEndTag() throws JspException {
/*
* Tag.EVAL_PAGE 执行后面的页面内容
* Tag.SKIP_PAGE 不执行后面的页面内容
*/
System.out.println("doEndTag");
try {
if (bodyContent != null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
} else {
}
} catch (IOException e) {
throw new JspTagException("IO ERROR:" + e.getMessage());
}
return EVAL_PAGE;
}
@Override
public int doStartTag() throws JspException {
/*
* Tag.EVAL_BODY_INCLUDE 包含主体内容
* Tag.SKIP_BODY 不包含主体内容
*/
JspWriter out=pageContext.getOut();
if (flag) {
try {
out.print("Myjsp Tag!");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
} else {
return SKIP_BODY;
}
}
@Override
public int doAfterBody() throws JspException {
// TODO Auto-generated method stub
return super.doAfterBody();
}
@Override
public void doInitBody() throws JspException {
super.doInitBody();
}
@Override
public BodyContent getBodyContent() {
return super.getBodyContent();
}
@Override
public JspWriter getPreviousOut() {
return super.getPreviousOut();
}
@Override
public void release() {
super.release();
}
@Override
public void setBodyContent(BodyContent b) {
this.bodyContent = b;
}
}
2. 写自定义Tag的tld文件
标签库元素<taglib>属性:表格如下
<taglib>属性表格</taglib>
属性 描述
tlib-version 本标签库实现版本
jsp-version 标签库依赖的JSP版本
short-name 被JSP创作工具使用的一个短的默认名词
uri 指定这个标签库的uri信息
display-name 被工具使用的显示用的名字
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
validator TLD验证信息
listener 实践监听器规范
tag标签相关属性:
tag标签相关属性表
属性 描述
name tag标签唯一的名称
tag-class tag标签的处理类
tei-class tag标签的TagExtraInfo类
body-content 标签主体的内容
display-name 显示的名称
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
variable 脚本变量的信息
attribute 标签属性的信息
3. web.xml中指定你的tld文件
<jsp-config>
<taglib>
<taglib-uri>/MyTag</taglib-uri>
<taglib-location>/WEB-INF/MyTag.tld</taglib-location>
</taglib>
</jsp-config>
4. 在JSP页面使用自定义标签
<%@ taglib prefix="t" uri="/MyTag" %>
<body>
<t:flag flag="true"></t:flag>
</body>
步骤如下
1. 扩张TagSupport
package com.meliora.mytag.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class MyTag extends TagSupport {
private static final long serialVersionUID = 1L;
boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public int doEndTag() throws JspException {
/*
* Tag.EVAL_PAGE 执行后面的页面内容
* Tag.SKIP_PAGE 不执行后面的页面内容
*/
System.out.println("doEndTag");
try {
if (bodyContent != null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
} else {
}
} catch (IOException e) {
throw new JspTagException("IO ERROR:" + e.getMessage());
}
return EVAL_PAGE;
}
@Override
public int doStartTag() throws JspException {
/*
* Tag.EVAL_BODY_INCLUDE 包含主体内容
* Tag.SKIP_BODY 不包含主体内容
*/
JspWriter out=pageContext.getOut();
if (flag) {
try {
out.print("Myjsp Tag!");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
} else {
return SKIP_BODY;
}
}
@Override
public int doAfterBody() throws JspException {
// TODO Auto-generated method stub
return super.doAfterBody();
}
@Override
public void doInitBody() throws JspException {
super.doInitBody();
}
@Override
public BodyContent getBodyContent() {
return super.getBodyContent();
}
@Override
public JspWriter getPreviousOut() {
return super.getPreviousOut();
}
@Override
public void release() {
super.release();
}
@Override
public void setBodyContent(BodyContent b) {
this.bodyContent = b;
}
}
2. 写自定义Tag的tld文件
标签库元素<taglib>属性:表格如下
<taglib>属性表格</taglib>
属性 描述
tlib-version 本标签库实现版本
jsp-version 标签库依赖的JSP版本
short-name 被JSP创作工具使用的一个短的默认名词
uri 指定这个标签库的uri信息
display-name 被工具使用的显示用的名字
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
validator TLD验证信息
listener 实践监听器规范
tag标签相关属性:
tag标签相关属性表
属性 描述
name tag标签唯一的名称
tag-class tag标签的处理类
tei-class tag标签的TagExtraInfo类
body-content 标签主体的内容
display-name 显示的名称
small-icon 被工具使用的小图标
large-icon 被工具使用的大图标
description 本标签的描述
variable 脚本变量的信息
attribute 标签属性的信息
3. web.xml中指定你的tld文件
<jsp-config>
<taglib>
<taglib-uri>/MyTag</taglib-uri>
<taglib-location>/WEB-INF/MyTag.tld</taglib-location>
</taglib>
</jsp-config>
4. 在JSP页面使用自定义标签
<%@ taglib prefix="t" uri="/MyTag" %>
<body>
<t:flag flag="true"></t:flag>
</body>