Jsp自定义标签
2016-12-23 17:07
316 查看
学习峰哥Jsp教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html
1、自定义标签简单实现
1)新建Tag处理类继承TagSupport(HelloWorldTag)
重写方法doStartTag()如下:
@Override
public int doStartTag() throws JspException {
JspWriter out = this.pageContext.getOut();
try {
out.println("自定义标签,你好!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return TagSupport.SKIP_BODY;//直接结束标签
}
此方法会在标签开始的地方回调
2)在WEB-INF目录下新建配置文件.tld,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>myjsp</short-name>
//对新建的tag进行声明
<tag>
<name>helloWorld</name>
<tag-class>
com.demo.tag.HelloWorldTag
</tag-class>
<body-content>empty</body-content>
</tag>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
运行效果如下:
2、自定义带属性的标签
1)基本步骤和1所述一致。
2)在处理类中添加属性及get和set方法如下:
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} 3)在tld文件中的配置改为如下:
<tag>
<name>helloWorld2</name>
<tag-class>
com.demo.tag.HelloWorldTag2
</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
4)Jsp页面调用改为如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<demo:helloWorld2 name="JspServlet"/>
</body>
</html> 运行效果如下(属性值已经取到):
3、定义带body体的标签。
1)基本步骤和1所述一致。
2)处理类内容如下:
package com.demo.tag;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class IteratorTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String var;
private String items;
private Iterator iter;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
public Iterator getIter() {
return iter;
}
public void setIter(Iterator iter) {
this.iter = iter;
}
/**
* 标签开始的时候回调
*/
@Override
public int doStartTag() throws JspException {
Object value = this.pageContext.getAttribute(items);
if ( value!= null && value instanceof List) {
this.iter = ((List) value).iterator();
if (iter.hasNext()) {
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_INCLUDE;//执行标签体
}else {
return TagSupport.SKIP_BODY;//结束标签体
}
}
return TagSupport.SKIP_BODY;//直接结束标签
}
/**
* 执行标签体
*/
@Override
public int doAfterBody() throws JspException {
if (iter.hasNext()) {
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_AGAIN;//再一次执行标签体
}
return TagSupport.SKIP_BODY;//直接结束标签
}
}
3)tld文件配置如下:
<tag>
<name>iterator</name>
<tag-class>
com.demo.tag.IteratorTag
</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>items</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> 4)Jsp页面调用如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<%
List list = new ArrayList();
list.add("XXXXXXXXX");
list.add("YYYYYYYYY");
list.add("ZZZZZZZZZ");
pageContext.setAttribute("list1", list);
%>
<demo:iterator items="list1" var="p">
<h1>${p}</h1>
</demo:iterator>
</body>
</html> 运行效果如下(遍历数组元素输出):
5、继承于简单标签的自定义标签:
1)基本步骤和1所述一致。
2)新建处理类如下:
package com.demo.tag;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.TagSupport;
public class IteratorTag2 extends SimpleTagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String var;
private String items;
private Iterator iter;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
public Iterator getIter() {
return iter;
}
public void setIter(Iterator iter) {
this.iter = iter;
}
@Override
public void doTag() throws JspException, IOException {
Object value = this.getJspContext().getAttribute(items);
if ( value!= null && value instanceof List) {
this.iter = ((List) value).iterator();
while (iter.hasNext()) {
this.getJspContext().setAttribute(var, iter.next());
this.getJspBody().invoke(null);
}
}
}
}
3)tld文件配置如下:
<tag>
<name>iterator2</name>
<tag-class>
com.demo.tag.IteratorTag2
</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> 4)Jsp页面调用如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<%
List list = new ArrayList();
list.add("XXXXXXXXX2");
list.add("YYYYYYYYY2");
list.add("ZZZZZZZZZ2");
pageContext.setAttribute("list1", list);
%>
<demo:iterator2 items="list1" var="p">
<h1>${p}</h1>
</demo:iterator2>
</body>
</html> 运行效果如下:
自定义标签介绍到此。
1、自定义标签简单实现
1)新建Tag处理类继承TagSupport(HelloWorldTag)
重写方法doStartTag()如下:
@Override
public int doStartTag() throws JspException {
JspWriter out = this.pageContext.getOut();
try {
out.println("自定义标签,你好!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return TagSupport.SKIP_BODY;//直接结束标签
}
此方法会在标签开始的地方回调
2)在WEB-INF目录下新建配置文件.tld,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>myjsp</short-name>
//对新建的tag进行声明
<tag>
<name>helloWorld</name>
<tag-class>
com.demo.tag.HelloWorldTag
</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>3)在Jsp页面使用该标签如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!--声明要引入的标签,prefix声明前缀,uri声明映射的配置文件-->
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%> <!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=utf-8"> <title>自定义标签</title> </head> <body> <demo:helloWorld/> </body> </html>
运行效果如下:
2、自定义带属性的标签
1)基本步骤和1所述一致。
2)在处理类中添加属性及get和set方法如下:
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} 3)在tld文件中的配置改为如下:
<tag>
<name>helloWorld2</name>
<tag-class>
com.demo.tag.HelloWorldTag2
</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
4)Jsp页面调用改为如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<demo:helloWorld2 name="JspServlet"/>
</body>
</html> 运行效果如下(属性值已经取到):
3、定义带body体的标签。
1)基本步骤和1所述一致。
2)处理类内容如下:
package com.demo.tag;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class IteratorTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String var;
private String items;
private Iterator iter;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
public Iterator getIter() {
return iter;
}
public void setIter(Iterator iter) {
this.iter = iter;
}
/**
* 标签开始的时候回调
*/
@Override
public int doStartTag() throws JspException {
Object value = this.pageContext.getAttribute(items);
if ( value!= null && value instanceof List) {
this.iter = ((List) value).iterator();
if (iter.hasNext()) {
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_INCLUDE;//执行标签体
}else {
return TagSupport.SKIP_BODY;//结束标签体
}
}
return TagSupport.SKIP_BODY;//直接结束标签
}
/**
* 执行标签体
*/
@Override
public int doAfterBody() throws JspException {
if (iter.hasNext()) {
this.pageContext.setAttribute(var, iter.next());
return TagSupport.EVAL_BODY_AGAIN;//再一次执行标签体
}
return TagSupport.SKIP_BODY;//直接结束标签
}
}
3)tld文件配置如下:
<tag>
<name>iterator</name>
<tag-class>
com.demo.tag.IteratorTag
</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>items</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> 4)Jsp页面调用如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<%
List list = new ArrayList();
list.add("XXXXXXXXX");
list.add("YYYYYYYYY");
list.add("ZZZZZZZZZ");
pageContext.setAttribute("list1", list);
%>
<demo:iterator items="list1" var="p">
<h1>${p}</h1>
</demo:iterator>
</body>
</html> 运行效果如下(遍历数组元素输出):
5、继承于简单标签的自定义标签:
1)基本步骤和1所述一致。
2)新建处理类如下:
package com.demo.tag;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.TagSupport;
public class IteratorTag2 extends SimpleTagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String var;
private String items;
private Iterator iter;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
public Iterator getIter() {
return iter;
}
public void setIter(Iterator iter) {
this.iter = iter;
}
@Override
public void doTag() throws JspException, IOException {
Object value = this.getJspContext().getAttribute(items);
if ( value!= null && value instanceof List) {
this.iter = ((List) value).iterator();
while (iter.hasNext()) {
this.getJspContext().setAttribute(var, iter.next());
this.getJspBody().invoke(null);
}
}
}
}
3)tld文件配置如下:
<tag>
<name>iterator2</name>
<tag-class>
com.demo.tag.IteratorTag2
</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<!--是否支持EL表达式 默认设置为true,支持-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag> 4)Jsp页面调用如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="demo" uri="/WEB-INF/myjsp.tld"%>
<!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=utf-8">
<title>自定义标签</title>
</head>
<body>
<%
List list = new ArrayList();
list.add("XXXXXXXXX2");
list.add("YYYYYYYYY2");
list.add("ZZZZZZZZZ2");
pageContext.setAttribute("list1", list);
%>
<demo:iterator2 items="list1" var="p">
<h1>${p}</h1>
</demo:iterator2>
</body>
</html> 运行效果如下:
自定义标签介绍到此。
相关文章推荐
- jsp自定义标签
- Jsp自定义标签_防盗链标签
- jsp自定义标签实现java的switch……case实例
- 使用自定义标签实现JSP页面和代码的分离
- JSP自定义标签(3)
- JSP自定义标签(三) 多选控件(3)
- jsp自定义标签
- JSP自定义标签-标签属性_动力节点Java学院整理
- jsp自定义标签(taglib)编写的原理和实现
- JSP带有标签体的自定义标签
- jsp使用自定义标签taglib分页系列——ContentBase.java
- jsp自定义标签学习
- jsp自定义标签
- JavaWeb -- Jsp 自定义标签的使用
- jsp2.0自定义标签(一)
- 掌握jsp自定义标签:(二)
- JSP自定义标签简单入门教程
- Java学习日记11:JSP自定义标签
- JSP 自定义标签
- jsp自定义标签--tagSupport和bodyTagSupport