JSP2.x自定义标签的创建

不同于JSP1.x,2.0开始,JSP提供了一套简化的标签,SimpleTag()接口,实现doTag()方法。

示例:

1、不带标签体的标签

taglib.tld配置

<tag>
        <name>table</name>
        <tagclass>my.Table</tagclass>
        <bodycontent>JSP</bodycontent>
        <info>Love Rabbit So Much.</info>
        <attribute>
            <name>items</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>url</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

MultiTag.java 标签实现类

package my;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MultiTag extends SimpleTagSupport
{
	private int num1;
	private int num2;

	@Override
	public void doTag() throws JspException, IOException
	{
		this.getJspContext().getOut().write(
		"" + num1 + " * " + num2 + " = " + (num1 * num2));
	}

	public int getNum1()
	{
		return num1;
	}

	public void setNum1(int num1)
	{
		this.num1 = num1;
	}

	public int getNum2()
	{
		return num2;
	}

	public void setNum2(int num2)
	{
		this.num2 = num2;
	}
}

multi.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://www.loverabbit.com/tags" prefix="taglib"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <taglib:multi num1="3" num2="4" />
</body>
</html>

运行结果:


2、带标签体的标签

taglib.tld配置

<tag>
        <name>toUpperCase</name>
        <tagclass>my.ToUpperCaseTag</tagclass>
        <bodycontent>tagdependent</bodycontent>
        <info>Love Rabbit So Much.</info>
    </tag>

ToUpperCaseTag.java 标签实现类

package my;

import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class ToUpperCaseTag extends SimpleTagSupport
{
	@Override
	public void doTag() throws JspException, IOException
	{
		// 将 标签体内容读入该 writer
		StringWriter writer = new StringWriter();
		// 标签体 为 JspFragment 的形式
		JspFragment jspFragment = this.getJspBody();
		// 通过 invoke 输出到指定的 writer 中。
		// 如果参数为 null,将输出到默认的 writer 中,即 getJspContext().getOut() 输出到HTML中
		jspFragment.invoke(writer);
		String content = writer.getBuffer().toString();
		this.getJspContext().getOut().print(content.toUpperCase());
	}
}

toUpperCase.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://www.loverabbit.com/tags" prefix="taglib"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <taglib:toUpperCase>
	This is a to upper case tag. 
</taglib:toUpperCase>
</body>
</html>

运行结果:


3、带多个标签体的标签

taglib.tld配置

<tag>
        <name>multiAttribute</name>
        <tagclass>my.MultiAttributeTag</tagclass>
        <bodycontent>tagdependent</bodycontent>
        <info>Love Rabbit So Much.</info>
        <attribute>
            <name>body1</name>
            <required>false</required>
            <fragment>true</fragment>
        </attribute>
        <attribute>
            <name>body2</name>
            <required>false</required>
            <fragment>true</fragment>
        </attribute>
    </tag>

MultiAttributeTag.java 标签实现类

package my;

import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MultiAttributeTag extends SimpleTagSupport
{
	private JspFragment body1;
	private JspFragment body2;

	public void setBody1(JspFragment body1)
	{
		this.body1 = body1;
	}

	public void setBody2(JspFragment body2)
	{
		this.body2 = body2;
	}

	@Override
	public void doTag() throws JspException, IOException
	{
		StringWriter writer1 = new StringWriter();
		StringWriter writer2 = new StringWriter();
		for(int i = 0; i < 5; i++)
		{
			// body1 调用 5 次
			body1.invoke(writer1);
		}
		for(int i = 0; i < 3; i++)
		{
			// body2 调用 3 次
			body2.invoke(writer2);
		}
		this.getJspContext().getOut().print(
		"3 次调用 body2 后的结果:" + writer2.getBuffer().toString()
		+ "<br/><br/>");
		this.getJspContext().getOut().print(
		"5 次调用 body1 后的结果:" + writer1.getBuffer().toString()
		+ "<br/><br/>");
	}
}

multiAttribute.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://www.loverabbit.com/tags" prefix="taglib"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
body {
	font-size: 12px;
}
</style>
</head>
<body>
    <taglib:multiAttribute>
	<jsp:attribute name="body1">标签体一, </jsp:attribute>
	<jsp:attribute name="body2">标签体二, </jsp:attribute>
</taglib:multiAttribute>
</body>
</html>

运行结果:



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值