http://www.cnblogs.com/eflylab/archive/2007/01/17/623163.html
自定义标签之 多个标签的嵌套
在实际开发中,往往需要多个标签的嵌套以完成一个任务,这样标签就存在父子关系。类似于下面:
<mt:switch value="test">
<mt:case value="test1">
my value is test1
</mt:case>
<mt:case value="test2">
my value is test2
</mt:case>
</mt:switch>
在上面的标签中,<mt:switch>为父标签,<mt:case>为子标签,一个父标签可以嵌套多个子标签和HTML,Scriptlets等。
下面就来写一个这样的标签
ifTag.java
package eflylab;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.util.Hashtable;
import java.io.Writer;
import java.io.IOException;
/**
*if Tag
*usage:<tag:if value=true>
*
* </tag:if>
*/
public class IfTag extends BodyTagSupport
{
private boolean value;
/**
*设置属性的值。
*/
public void setValue(boolean value)
{
this.value=value;
}
/**
*doStartTag方法,如果value为true,那么
*就计算tagbody的值,否则不计算body的值。
*/
public int doStartTag() throws JspTagException
{
if(value)
{
System.out.println("value is true");
return EVAL_BODY_INCLUDE;
}
else
{
System.out.println("value is false");
return SKIP_BODY;
}
}
/**
*覆盖doEndTag方法
*/
public int doEndTag() throws JspTagException
{
try
{
if(bodyContent != null)
{
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
}
catch(java.io.IOException e)
{
throw new JspTagException("IO Error: " + e.getMessage());
}
return EVAL_PAGE;
}
}
Value为IfTag的属性。当为真时,那么就计算IfTagBody;如果为假,就忽略
因为IfTag标签中要嵌套了一个子标签,这个子标签用于输出一些信息到客户端。
下面的是IfTag中嵌套的子标签。
OutTag.java
package eflylab;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.util.Hashtable;
import java.io.Writer;
import java.io.IOException;
public class OutTag extends TagSupport
{
private Object value;
/**
*覆盖doStartTag方法
*/
public void setValue(Object value)
{
this.value=value;
}
public int doStartTag() throws JspTagException {
return EVAL_BODY_INCLUDE;
}
/**
*覆盖doEndTag方法
*/
public int doEndTag()throws JspTagException
{
try
{
System.out.println(value);
pageContext.getOut().write(value.toString());
}
catch(IOException ex)
{
throw new JspTagException("Fatal error:hello tag conld not write to JSP out");
}
return EVAL_PAGE;
}
}
OutTag就是一个简单的不带Body的标签,它主要向客户端输出一些信息。
下面是在标签描述文件中的声明,加入以下内容
<tag>
<name>if</name>
<tag-class>eflylab.IfTag</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>out</name>
<tag-class>eflylab.OutTag</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
测试代码:
<%@ taglib uri="/demotag" prefix="mt" %>
<html>
<head>
<title>vcorwork tag</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<HR>
协作标签<br>
<%
boolean test=true;
String outValue="HelloWorld!";
%>
<mt:if value="<%=test%>">
<mt:out value="<%=outValue%>">
这是mt:out>打印出的内容。
</mt:out>
</mt:if>
<HR>
<mt:if value="false">
<mt:out value="<%=outValue%>">
这些内容会显示在客户端。
</mt:out>
</mt:if>
<br>
</BODY>
</HTML>
运行:
分享到:
相关推荐
介绍了mybatis自定义标签,添加自定义标签的实现代码,通过实例代码展示给大家
本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...
java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签
JSP自定义标签是用户定义的JSP语言元素,可以看成是一种通过标签处理器生成基于XML脚本的方法。自定义标签在功能上和逻辑上都与JavaBean类似,都是一组可重用的组件代码。相较于JavaBean,自定义标签可以使Web开发者...
jsp 自定义标签 一个简单的自定义标签实现
JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。 标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。 标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎...
JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签
通过struts2 自定义标签实例,可以用这个对项目中的实现自定义标签。从而减少代码。
JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...
Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不...
使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...
用js实现自定义标签,用js实现自定义标签,用js实现自定义标签
自己写的自定义标签库,实现JSTL常用的功能。
java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签java自定义标签
jQuery自定义标签添加删除代码是一款简单实用的自定义添加标签跟删除特效。
里面有thinkphp自定义标签的方法和使用文档
struts实现自定义标签
jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...
介绍自定义标签的运行原理以及标签可以干哪些事情,简介传统标签与自定义标签的区别