JSP页面中标签分为两种
- 正常标签:<开始标签>。标签体。</结束标签>
- 空标签
自定义标签的开发和使用的三步骤
第一步:创建一个标签助手类(继承BodyTagSupport) 标签属性必须与助手类的属性对应、且要提供对应get/set方法
第二步:创建标签库描述文件(tld),添加自定义标签的配置
注:tld文件必须保存到WEB-INF目录或其子目录
第三步:?在JSP通过taglib指令导入标签库描述文件,并通过指定后缀访问此自定义标签
标签生命周期声明?
标签方法的含义:
- SKIP_BODY:跳过主体
- EVAL_PAGE:计算页面的后续部分
- SKIP_PAGE:跳过页面的后续部分
- EVAL_BODY_INCLUDE:计算标签主体内容并[输出]
- EVAL_BODY_AGAIN:再计算主体一次
自定义标签代码的实现
//实现类
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**jsp自定义标签out:传值
* @author Administrator
*
*/
public class OutTag extends BodyTagSupport {
private String value;//注意要私有化属性,提供set/get的方法,否则就会报 不能为属性:[value]找到setter 方法.的错误
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(this.value);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException {
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
return EVAL_PAGE;
}
}
//第二步:在WEB-INF目录下导tid文件
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<!-- 标签库的版本 -->
<tlib-version>1.0</tlib-version>
<!-- JSP版本 -->
<jsp-version>1.2</jsp-version>
<!-- 自定义标签简称-->
<short-name>Simple Tags</short-name>
<!-- 自定义标签引用名 -->
<uri>/zking</uri>
<!-- hello world标签 -->
<tag>
<name>out</name>
<tag-class>com.zking.tag.OutTag</tag-class>
<body-content>empty</body-content>
<attribute>
<!-- 自定义标签的属性名称 -->
<name>value</name>
<!-- true表示必填 -->
<required>true</required>
<!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
//第三步:在JSP页面中调用该标签
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="/zking"%>//注意要导标签引用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<c:out value="Hello World!"/>
</body>
</html>
?
?
|