自定义标签的开发----内嵌标签的开发
来源:互联网 发布:最新网络诈骗案例 编辑:程序博客网 时间:2024/06/06 02:15
在实际开发中,往往需要多个标签的嵌套以完成一个任务,这样标签就存在父子关系。类似于下面:
下面就来写一个这样的标签
ifTag.java
下面是在标签描述文件中的声明,加入以下内容
<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等。<mt:case value="test1">
my value is test1
</mt:case>
<mt:case value="test2">
my value is test2
</mt:case>
</mt:switch>
下面就来写一个这样的标签
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;
}
}
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的标签,它主要向客户端输出一些信息。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;
}
}
下面是在标签描述文件中的声明,加入以下内容
<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>
测试代码:<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>
运行:<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>
- 自定义标签的开发----内嵌标签的开发
- 自定义标签库的开发
- 自定义标签的开发流程
- 自定义标签库的开发
- tOMCAT7自定义标签的开发
- JavaWeb----自定义标签的开发
- 【自定义标签开发】05-开发带属性的标签
- 自定义标签内嵌Struts2标签的解决方法
- servlet的自定义标签的开发步骤
- JSP自定义标签(4):开发jsp嵌套的标签
- jsp自定义标签(5):开发迭代的标签
- JSP自定义标签库的开发
- 自定义标签的开发与使用
- 自定义标签的开发之tld文件
- 自定义JSP标签的开发流程
- JSP自定义标签的开发与应用
- 自定义标签之 SimpleTag的开发
- 破晓博客-自定义标签的开发
- java数据结构:二叉树
- Castle IOC容器与Spring.NET配置之比较
- Microsoft Office 2007 SP1 4in1 双语、精简、便携版(3月30日更新)
- printf函数(格式输出函数)
- C#中DataGridView多層表頭的制作(2)
- 自定义标签的开发----内嵌标签的开发
- eclipse.ini内存设置
- Asp.Net中获取Castle容器中的服务的另一方法
- 内存对齐
- 利用Session防止表单重复提交
- Sending Emails and SAP Mail
- AVI文件格式
- Castle在“新.NET时代”将何去何从
- MySQL参数说明