您的位置:首页 > 编程语言 > Java开发

javaweb之自定义标签——简单标签库

2014-03-24 14:15 429 查看
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签控制是否执行标签体</title>
</head>

<body>
<sitcast:demo1>
aaaaa
</sitcast:demo1>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签迭代标签体</title>
</head>

<body>
<sitcast:demo2>
This is my JSP page. <br>
</sitcast:demo2>
</body>
</html>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签修改标签体</title>
</head>

<body>
<sitcast:demo3>
aaaaaa
</sitcast:demo3>
</body>
</html>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>

<sitcast:demo4/>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签控制标签余下JSP是否执行</title>
</head>

<body>
aaaaaa
</body>
</html>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>开发带属性的标签</title>
</head>

<body>
<%--这里date属性不能写成"1980-01-01" 因为服务器只支持8种基本类型的转换,需要用脚本表达式或者EL表达式给属性赋值 --%>
<sitcast:demo5 count="9" date="<%=new Date() %>">
aaaaaa<br />
</sitcast:demo5>
</body>
</html>

package cn.itcast.web.simpletag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//控制标签体是否执行
public class SimpleTagDemo1 extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {
/*让标签体执行
//拿到标签体对象
JspFragment jf = this.getJspBody();
//调用标签体对象的输出方法,传给它一个流,代表输出到哪里去
jf.invoke(this.getJspContext().getOut());
*/

/*
* 不让标签体执行,就不输出,或者什么都不写
*/
JspFragment jf = this.getJspBody();
}

}

package cn.itcast.web.simpletag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//迭代标签体(控制JSP页面重复执行)
//就是拿到标签体重复输出
public class SimpleTagDemo2 extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {

JspFragment jf = this.getJspBody();
for(int i=0;i<5;i++) {
//jf.invoke(this.getJspContext().getOut());
jf.invoke(null);//默认就是写给浏览器
}
}

}

package cn.itcast.web.simpletag;

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;
//修改标签体
//invoke到缓冲区修改后再输出
public class SimpleTagDemo3 extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {
//拿到标签体
JspFragment jf = this.getJspBody();
//创建带有缓冲区的Writer
StringWriter sw = new StringWriter();
//invoke到缓冲区
jf.invoke(sw);
//拿出缓冲区数据
String content = sw.toString();
//修改缓冲区数据
content = content.toUpperCase();
//输出给浏览器
this.getJspContext().getOut().write(content);
}

}

package cn.itcast.web.simpletag;

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//控制标签余下jsp是否执行
//抛出SkipPageException相当于返回了SKIP_PAGE,余下的JSP就不会执行了
public class SimpleTagDemo4 extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {
throw new SkipPageException();
}

}

package cn.itcast.web.simpletag;

import java.io.IOException;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

//开发带属性的标签
//定义出属性和相应的set方法,属性值会自动传递进来,在doTag方法中直接用属性
public class SimpleTagDemo5 extends SimpleTagSupport {
//在给属性赋值的时候是字符串,设置属性的时候是int,服务器只支持8种基本类型的转换
private int count;
//在赋值8种基本类型以外的属性时,用脚本表达式赋值或者用EL表达式赋值
private Date date;

public void setDate(Date date) {
this.date = date;
}

public void setCount(int count) {
this.count = count;
}

@Override
public void doTag() throws JspException, IOException {
JspFragment jf = this.getJspBody();

this.getJspContext().getOut().write(date.toLocaleString() + "<br/>");

for(int i=0;i<count;i++) {
jf.invoke(null);
}
}

}

<?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>sitcast</short-name><!-- 描述文件的名称 -->
<uri>http://www.sitcast.com</uri><!-- 描述文件的uri -->

<tag>
<name>demo1</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo1</tag-class>
<!-- 简单标签有标签体,scriptless代表有标签体 ,为什么不是JSP了呢,
因为在JSP2.0以后sun公司不建议在JSP页面中写代码了,如果是JSP,
页面中可以写脚本代码		scriptless(无脚本)  -->
<body-content>scriptless</body-content>
</tag>

<tag>
<name>demo2</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo2</tag-class>
<body-content>scriptless</body-content>
</tag>

<tag>
<name>demo3</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo3</tag-class>
<body-content>scriptless</body-content>
</tag>

<tag>
<name>demo4</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo4</tag-class>
<body-content>empty</body-content><!-- 没有标签体用empty -->
</tag>

<tag>
<name>demo5</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo5</tag-class>
<body-content>scriptless</body-content>
<!-- 声明属性 -->
<attribute>
<name>count</name><!-- 属性名称 -->
<required>true</required><!-- 属性是否必须 -->
<!-- 运行时表达式的值,false的话在JSP页面中给属性赋值,只能是count="9"这种形式
true的话,可以是运行时的表达式,可以用脚本表达式给属性赋值<%= %>也可以使用EL表达式给属性赋值
-->
<rtexprvalue>true</rtexprvalue>
</attribute>

<attribute>
<name>date</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>

</taglib>

具体文档查看上传资源中的自定义标签文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: