深入体味JavaWeg开发内幕——使用传统自定义标签的实例应用
深入体验JavaWeg开发内幕——使用传统自定义标签的实例应用
2.控制整个jsp页面是否执行。
3.控制jsp页面内容重复执行。
4. 修改jsp页面内容输出。
效果一





将自定义标签体中的内容转成大写后输出

好了关于传统的自定义标签到这里就介绍完了,后面将会为大家介绍简单标签的使用!
关于传统自定义标签也就是继承TagSupport类或者BodyTagSurpport类的标签处理类,下面我们来看一看开发传统标签的实例吧!
1. 控制jsp页面某一部分内容是否执行。
2.控制整个jsp页面是否执行。
3.控制jsp页面内容重复执行。
4. 修改jsp页面内容输出。
这是标签库描述文件,以下不再过多赘述读者可自己查看。
lijizh.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>lijizh</short-name>
<uri>http://www.hbsi.com</uri>
<tag>
<description>Outputs Hello, World</description>
<name>lijizh</name>
<tag-class>www.hbsi.web.tag.CustomTagIP</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<description>show1</description>
<name>H</name>
<tag-class>www.hbsi.web.tag.ShowInnerLableContent</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<description>show2</description>
<name>H1</name>
<tag-class>www.hbsi.web.tag.ShowInnerLableContent1</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<description>show3</description>
<name>H2</name>
<tag-class>www.hbsi.web.tag.ShowInnerLableContent2</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<description>show4</description>
<name>H3</name>
<tag-class>www.hbsi.web.tag.ShowInnerLableContent3</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
1. 控制jsp页面某一部分内容是否执行。
执行标签体ShowInnerLableContent.java
public class ShowInnerLableContent extends TagSupport {
@Overridepublic int doStartTag() throws JspException {
//此字段在doStartTag()中不适用,其作用是控制JSP页面中部分内容是否执行,也就是说无法实现对整个页面内容的限定return this.EVAL_BODY_INCLUDE;} }
show1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>
<html>
</head>
<body>
<lijizh:H> SKIP_BODY This is my JSP page. <br> </lijizh:H>
aaaaaaaa<br/>
</body>
</html>
效果一
//忽略标签体
public class ShowInnerLableContent extends TagSupport {
@Override
public int doStartTag() throws JspException {
// 此字段在doStartTag()中不适用,其作用是控制JSP页面中部分内容是否执行,也就是说无法实现对整个页面内容的限定
return this.SKIP_BODY;
}
}
//其他文件不做变化。
2.控制整个jsp页面是否执行。
//执行标签体后的页面内容
ShowInnerLableContent1.java
public class ShowInnerLableContent1 extends TagSupport {
@Overridepublic int doEndTag() throws JspException {
// 该方法只是对自定义标签结束时调用,以判断该标签之后的内容是否显示return this.EVAL_PAGE;}}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'show1.jsp' starting page</title>
</head>
<body>
<lijizh:H1>
SKIP_PAGE
This is my JSP page. <br>
</lijizh:H1>
aaaaaaaa<br/>
</body>
</html>
//忽略标签体后的页面内容:
public class ShowInnerLableContent1 extends TagSupport {
@Override
public int doEndTag() throws JspException {
// 该方法只是对自定义标签结束时调用,以判断该标签之后的内容是否显示
return this.SKIP_PAGE;
}
}
3.控制jsp页面内容重复执行。
//重复执行
public class ShowInnerLableContent2 extends TagSupport {
int i =0;
@Override
public int doStartTag() throws JspException {
return this.EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException {
// 由于在该方调用之前先调用doStartTag()方法,而doStartTag()方法的默认返回值为SKIP_BODY;
// 所以应该重写doStartTag()方法将其返回值设置为EVAL_BODY_INCLUDE;另外还需要为自定义标签
// 体定义属性告知其显示循环显示次数或给doAfterBody()方法定义循环次数才可起作用否则该方法
// 不会去执行
i++;
if(i<=3){
return this.EVAL_BODY_AGAIN;
}else{
return this.SKIP_BODY;
}
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>
<html>
<head>
<title>My JSP 'show1.jsp' starting page</title>
</head>
<body>
<lijizh:H2>
show3EVAL_BODY_AGAIN<br/>
This is my JSP page. <br>
</lijizh:H2>
aaaaaaaa<br/>
bb<br/>
</body>
</html>
4. 修改jsp页面内容输出。
将自定义标签体中的内容转成大写后输出
public class ShowInnerLableContent3 extends BodyTagSupport {
@Override
public int doEndTag() throws JspException {
// 此方法用于在继承了BodyTagSupport 类的ShowInnerLableContent3中
// 用于修改自定义标签中的内容,根据其返回值可确定是否显示标签后面的
// page内容
BodyContent bc = this.getBodyContent();
String content = bc.getString();
String upperCase = content.toUpperCase();
JspWriter out = this.pageContext.getOut();
try {
out.print(upperCase);
} catch (IOException e) {
throw new RuntimeException(e);
}
return this.EVAL_PAGE;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>
<html>
<head>
<title>My JSP 'show1.jsp' starting page</title>
</head>
<body>
show4toUppercase<br/>
<lijizh:H3>
touppercase! <br>
</lijizh:H3>
</body>
</html>
好了关于传统的自定义标签到这里就介绍完了,后面将会为大家介绍简单标签的使用!