-
控制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"%>
控制标签体是否执行
看看执行了吗?
-
控制整个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"%>
控制整个jsp页面是否执行
整个界面是否执行了呢?
-
控制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"%>
控制jsp页面内容重复执行。
看看执行了多少次
-
修改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"%>
得到标签体内的数据
jeno_jibenmima
最后是 .tld文件配置文件
A tag library exercising SimpleTag handlers.
1.0
SimpleTagLibrary
/jeno
viewIP
jeno.com.tld.ViewIPTag
empty
Demo1
jeno.com.tld.Demo1
JSP
Demo2
jeno.com.tld.Demo2
JSP
Demo3
jeno.com.tld.Demo3
JSP
Demo4
jeno.com.tld.Demo4
JSP