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

来源:互联网 发布:淘宝代销物流怎么设置 编辑:程序博客网 时间:2024/05/16 01:37
<%@ 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic void doTag() throws JspException, IOException {//拿到标签体JspFragment jf = this.getJspBody();//创建带有缓冲区的WriterStringWriter 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 {@Overridepublic 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;}@Overridepublic 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>

具体文档查看上传资源中的自定义标签文档  


0 0