-
控制jsp页面某一部分内容是否执行。
编写一个类实习Tag接口,控制 doStartTag()方法的返回值。如果返回 Tag.EVAL_BODY_INCLUDE 是执行标签体。反之返回Tag.SKIP_BODY是不执行标签体内的代码。
/**
* 控制 jsp 页面中某一部分代码是否执行
*/
public class Demo1 implements Tag {
@Override
public int doEndTag() throws JspException {
return 0;
}
@Override
public int doStartTag() throws JspException {
return Tag.SKIP_BODY;//不执行标签体
// return Tag.EVAL_BODY_INCLUDE;//执行标签体
}
@Override
public Tag getParent() {
return null;
}
@Override
public void release() {
}
@Override
public void setPageContext(PageContext arg0) {
}
@Override
public void setParent(Tag arg0) {
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制标签体是否执行</title>
</head>
<body>
<jeno:Demo1>
看看执行了吗?
</jeno:Demo1>
</body>
</html>
-
控制整个jsp页面是否执行。
编写一个类实现Tag接口。控制 doEndTag();如果返回Tag.EVAL_PAGE则执行余下的 jsp代码 。反之返回Tag.SKIP_PAGE则不执行余下的jsp代码。
/**
* 控制整个 Jsp 界面是否执行
*
*/
public class Demo2 implements Tag {
@Override
public int doEndTag() throws JspException {
// return Tag.SKIP_PAGE;//不执行余下的jsp代码
return Tag.EVAL_PAGE;//执行余下的 jsp代码
}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return 0;
}
@Override
public Tag getParent() {
// TODO Auto-generated method stub
return null;
}
@Override
public void release() {
// TODO Auto-generated method stub
}
@Override
public void setPageContext(PageContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void setParent(Tag arg0) {
// TODO Auto-generated method stub
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制整个jsp页面是否执行</title>
</head>
<jeno:Demo2/>
<body>
整个界面是否执行了呢?
</body>
</html>
-
控制jsp页面内容重复执行。
编写一个类实现IterationTag()接口。控制doAfterBody()的返回值。返回EVAL_BODY_AGAIN为执行一次。返回SKIP_BODY为终止重复执行。
也可以 继承 extends TagSupport 进行操作返回值
public class Demo3 implements IterationTag{
private int index=0;
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
return 0;
}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return Tag.EVAL_BODY_INCLUDE;//执行标签体
}
@Override
public Tag getParent() {
// TODO Auto-generated method stub
return null;
}
@Override
public void release() {
// TODO Auto-generated method stub
}
@Override
public void setPageContext(PageContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void setParent(Tag arg0) {
// TODO Auto-generated method stub
}
@Override
public int doAfterBody() throws JspException {
index++;
if (index==8) {
return IterationTag.SKIP_BODY; //返回这个将终止
}else
return IterationTag.EVAL_BODY_AGAIN;//返回一次,执行一次标签体
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>控制jsp页面内容重复执行。</title>
</head>
<body>
<jeno:Demo3>
看看执行了多少次 <br>
</jeno:Demo3>
</body>
</html>
-
修改jsp页面内容输出。
编写一个类继承 BodyTagSupport 类。控制 doStartTag()的返回值。返回** BodyTag.EVAL_BODY_BUFFERED** 则web服务器会创建 bodycontent对象并捕获标签体。我们可以在doEndTag()方法中拿到标签体的内容。
public class Demo4 extends BodyTagSupport {
//bodycontent
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
//拿到标签体
String content = this.getBodyContent().getString();
String result = content.toUpperCase();
try {
this.pageContext.getOut().write(result);
} catch (IOException e) {
throw new RuntimeException(e);
}
return Tag.EVAL_PAGE;
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/jeno" prefix="jeno"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>得到标签体内的数据</title>
</head>
<body>
<jeno:Demo4>
jeno_jibenmima
</jeno:Demo4>
</body>
</html>
最后是 .tld文件配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>SimpleTagLibrary</short-name>
<uri>/jeno</uri>
<tag>
<name>viewIP</name> <!-- 为标签处理器类配一个标签名 -->
<tag-class>jeno.com.tld.ViewIPTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>Demo1</name> <!-- 为标签处理器类配一个标签名 -->
<tag-class>jeno.com.tld.Demo1</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>Demo2</name> <!-- 为标签处理器类配一个标签名 -->
<tag-class>jeno.com.tld.Demo2</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>Demo3</name> <!-- 为标签处理器类配一个标签名 -->
<tag-class>jeno.com.tld.Demo3</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>Demo4</name> <!-- 为标签处理器类配一个标签名 -->
<tag-class>jeno.com.tld.Demo4</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>