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>
具体文档查看上传资源中的自定义标签文档
相关文章推荐
- Javaweb----简单自定义标签的编写
- javaweb之自定义标签库——简单的foreach标签(对List迭代)
- JAVA_WEB之 Jsp简单的自定义标签
- JAVAWEB开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)
- JavaWeb自定义标签的开发步骤
- Java自定义简单标签实例
- Java自定义简单标签
- javaweb之自定义标签库——迭代标签(foreach)(可迭代Map、List、Set、任意数组)
- JavaWeb-自定义标签、传统标签和简单标签
- 深入分析JavaWeb Item24 -- jsp2.X自定义标签开发进阶
- 【Java.Web】JSP —— 标签库taglib —— 自定义JSP标签 —— 标签库描述文件 TLD,发布
- JavaWeb之 JSP:自定义标签
- 【Java.Web】JSP —— 标签库taglib —— 自定义JSP标签 —— 示例
- JavaWeb 自定义 “标签文件” 而非 "标签"
- Java Web+GeoTools工具+自定义几何对象构造器+简单应用
- Java乔晓松-简单标签1(自定义标签)
- java:jsp: 一个简单的自定义标签 tld
- javaweb之自定义标签——带属性的标签
- Java Web 自定义标签 JSTL及EL语言
- java实现简单的 自定义web容器 tomcatweb服务器