您的位置:首页 > Web前端 > JavaScript

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>
</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> 运行效果如下:



自定义标签介绍到此。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: