JSP2.0中Simple Tag介绍

JSP2.0中为了简化标签的复杂性,增加了制作Simple Tag的标签类SimpleTagSupport类。
SimpleTagSupport类是实现SimpleTag接口的。它只需要实现一个doTag()方法即可,而不需要一堆回传值。

举例说明:
例1:HelloSimpleTag标签
第一步:制作标签处理类
HelloSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class HelloSimpleTag extends SimpleTagSupport {

public void doTag() throws JspException, IOException {
  
      JspWriter out = getJspContext().getOut();
      out.println("Hello Simple Tag");
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Hello Simple Tag</description>
         <name>HelloSimpleTag</name>
         <tag-class>com.newould.taglib.HelloSimpleTag</tag-class>
         <body-content>empty</body-content>
       </tag>
</taglib>

第三步:编写Jsp网页
HelloSimpleTag.jsp

<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>HelloSimpleTag.jsp</title>
</head>
<body>

<h2>Simple Tag 标签</h2>

<h1><mytag:HelloSimpleTag /></h1>

</body>
</html>

=================================================================

例2:AddSimpleTag标签
第一步:制作标签处理类
AddSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class AddSimpleTag extends SimpleTagSupport {

private int num1 = 0;
private int num2 = 0;

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

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

public void doTag() throws JspException, IOException {

      JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      int sum = num1 + num2;
      ctx.setAttribute("sum", Integer.toString(sum));
  
      out.println(num1 + " + " + num2 + " = " + sum);
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Add Simple Tag</description>
         <name>Add</name>
         <tag-class>com.newould.taglib.AddSimpleTag</tag-class>
         <body-content>empty</body-content>
      
         <attribute>
           <name>num1</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>

         <attribute>
           <name>num2</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
            
       </tag>
   
</taglib>

第三步:编写Jsp网页
AddSimpleTag.jsp

%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>AddSimpleTag.jsp</title>
</head>
<body>

<h2>AddSimpleTag 标签</h2>

<h1><mytag:Add num1="5" num2="9" /></h1>

最后结果:${sum}

</body>
</html>

=================================================================

例3 RepeatSimpleTag标签
RepeatSimpleTag标签 主要是用来重复显示某段文字。
这个例子在处理上与前两个例子有点不同

第一步:制作标签处理类
RepeatSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class RepeatSimpleTag extends SimpleTagSupport {

private int count = 0;//重复的次数
private JspFragment fragment;//重复的内容

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

public void setFragment(JspFragment fragment) {
      this.fragment = fragment;
}

public void doTag() throws JspException, IOException {

      JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      for(int i=0 ; i<count ; i++) {
       fragment.invoke(null);//表示将fragment的内容显示出来
      }
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Repeate Simple Tag</description>
         <name>Repeat</name>
         <tag-class>com.newould.taglib.RepeatSimpleTag</tag-class>
         <body-content>empty</body-content>
      
         <attribute>
           <name>count</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>

         <attribute>
           <name>fragment</name>
           <required>true</required>
           <fragment>true</fragment>
         </attribute>
       </tag>    
   
</taglib>

注意:<fragment>true</fragment>,一定要这样设定fragment属性。

第三步:编写Jsp网页
RepeatSimpleTag.jsp

<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>RepeatSimpleTag.jsp</title>
</head>
<body>

<h2>RepeatSimpleTag 标签</h2>

<mytag:Repeat count="5" >
<jsp:attribute name="fragment">
重复执行 ....<br>
</jsp:attribute>
</mytag:Repeat>
</body>
</html>

=================================================================

DynamicAttributes接口
只要制作的标签实现了DynamicAttributes接口就有动态属性的功能。
例如:我们要做多个数的累加运算,则AddSimpleTag标签就可以通过实现DynamicAttributes接口就可以实现了.

实现DynamicAttributes接口,必须实现setDynamicAttributes()方法,此方法用来接收动态属性.

举例:第一步:制作标签处理类

package com.newould.taglib;

import java.io.*;
import java.util.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class DynamicAdd extends SimpleTagSupport implements DynamicAttributes {

//用来接收动态属性
private ArrayList keys = new ArrayList();
private ArrayList values = new ArrayList();

public void doTag() throws JspException, IOException {

      JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      float num = 0;
      float sum = Float.parseFloat((String)values.get(0));
      out.print(sum);
   
      for (int i = 1 ; i < keys.size() ; i++) {
       String temp = (String)values.get(i);
       num = Float.parseFloat(temp);
       sum = sum + num;
       out.print(" + " + num);
      }
   
      out.print(" = " + sum);
      ctx.setAttribute("sum", Float.toString(sum));
   
}

public void setDynamicAttribute(String uri, String name, Object value) throws JspException {
      keys.add(name);
      values.add(value);
}
}

第二步:编写标签性质文件
<tag>
         <description>DynamicAttribute</description>
         <name>DynAdd</name>
         <tag-class>com.newould.taglib.DynamicAdd</tag-class>
         <body-content>empty</body-content>

         <dynamic-attributes>true</dynamic-attributes>
       </tag>    

第三步:编写Jsp网页
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="JSPBook" tagdir="/WEB-INF/tags/" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
<title>CH16 - DynAdd.jsp</title>
</head>
<body>

<h2>Tag File 范例</h2>

<JSPBook:DynAdd num1="111" num2="222" num3="444" >

<jsp:attribute name="great">
      <font color="red">SUM:${sum} ...</red>
</jsp:attribute>
<jsp:attribute name="less">
      <font color="blue">SUM:${sum} ...</red>
</jsp:attribute>
</JSPBook:DynAdd>

</body>
</html>
JSP2.0中为了简化标签的复杂性,增加了制作Simple Tag的标签类SimpleTagSupport类。
SimpleTagSupport类是实现SimpleTag接口的。它只需要实现一个doTag()方法即可,而不需要一堆回传值。

转载于:https://www.cnblogs.com/jadmin/archive/2007/08/14/2206335.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[置顶] 动软软代码生成器使用(127.0.0.1)无法看到 SQLServer2008 新附加数据库的 原因 以及 解决方案...

在项目中&#xff0c;使用代码生成器给我们的开发工作带来了相当大的方便&#xff0c;而有时候会出现这样的问题&#xff0c;就是新附加的数据库在动软代码生成器当中看不到&#xff0c;奇了怪了 一&#xff0c;首先看动软代码生成器的链接字符串&#xff0c;如图 &#xff0c;…

对Hibernate使用之愚见

对Hibernate使用之愚见 国人跟风之潮&#xff0c;自古有之&#xff0c;至今亦然。确实&#xff0c;经过配置优化的Hibernate效率与无任何优化的Hibernate效率诚然不可同日而语。但由于项目开发的复杂性&#xff0c;开发周期中一些突发因素的制约&#xff0c;及项目构建者自身能…

设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式

AbstractFactory抽象工厂模式&#xff08;创建型&#xff09; 作用&#xff1a; 这种模式支持创建不同的对象&#xff0c;这些对象功能接近且一般都是在一起创建的。抽象工厂被具体化成不同的工厂来创建类似产品的不同产品。这种模式将类于使用的客户端分离以便通过工厂来创建。…

QT练习9 Dialog学习

http://files.cnblogs.com/hnrainll/dialog.zip 源代码下载转载于:https://www.cnblogs.com/hnrainll/archive/2011/05/30/2063135.html

C#中NULL,,DBNULL,String.Empty,Convert.IsDBNull()的区别

C#中的空值的判断较麻烦&#xff0c;不象在VB6中那么简单&#xff0c;这些各种空值的判断和理解对不熟悉的人来说&#xff0c;可能很麻烦&#xff0c;现就我在使用过程中的一点体会和大家共同分享。 (1)NULL null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型…

关于初始化C++类成员

转自:http://www.vckbase.com/document/viewdoc/?id584 在使用C编程的过程当中&#xff0c;常常需要对类成员进行初始化&#xff0c;通常的方法有两种&#xff1a; 第一种方法&#xff1a; CMYClass::CSomeClass() {x0;y1; } 第二种方法&#xff1a; CSomeClass::CSomeClass…

ASP.NET 2.0 中的新增服务、控件与功能概述(四)

原文出自http://blog.sina.com.cn/s/blog_48b6cd65010004fc.html个性化 另一个新增的服务是个性化&#xff0c;它提供了一种现成的解决方案&#xff0c;用于解决存储站点用户的个性化设置问题。目前&#xff0c;此类设置通常存储在Cookie、后端数据库或这两者中。无论这些设置存…

C/C++ 交换两个数,不使用第三个变量, 函数模板来实现

#include <iostream>template<typename T> void exchangeTwoNumber(T &t1, T &t2)&#xff1b;void test();int main() {int a 10, b 20;double q 10.1, w 20.2;char z z, x x;std::cout << "交换前的 a " << a << &qu…

Oracle错误集!

个人使用Oracle时出现的错误&#xff0c;在这里记下来&#xff0c;加深印象。 1、ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes 今天写存储过程时&#xff0c;使用dbms_output.put_line(result:||i||---||documentID);输出测试结果。当我设置其输出记录较多…

[原+转]CSS hack 小技巧 让你的CSS 兼容ff ie6.0 ie7.0

在做东西的时候发现在ie6.0中做的东西到ff下面目全非100% css不兼容不问题 查阅了相关资料 个人感觉以下是一个笨的也是比较快的处理兼容问题的方法方法就是针对不同的浏览器写不同的css 以前用!important 但是ie7 和ff 就不好分了个人感觉比较好的方法是 samplepadding:0px; …

准备试用svn

用了VSS2005感觉一般&#xff0c;准备试用svn&#xff01;&#xff01;&#xff01;转载于:https://www.cnblogs.com/jessenee/archive/2008/03/31/1131027.html

web功底之强,实属罕见。。

不看不知道&#xff0c;一看汗得死你了。。纯用html做的。不多说&#xff0c;看看就知道了&#xff0c;http://www.kanqq.com/qq/smilies/ku.htm 以人格保证&#xff0c;不是病毒网页。。。 转载于:https://www.cnblogs.com/lsgoodsun/archive/2007/11/04/949222.html

第三次作业-Scrum

理解&#xff1a; 首先&#xff0c;敏捷并不是一门具体的技术&#xff0c;而是一种理念或者说是一种思想。它可以指导我们更加高效的开发。其次&#xff0c;敏捷开发都具有以下共同的特征&#xff1a; 1.迭代式开发2. 增量交付 3. 开发团队和用户反馈推动产品开发 4. …

如何处理错误消息Please install the gcc make perl packages

2019独角兽企业重金招聘Python工程师标准>>> 如何处理这行错误消息&#xff1f; Please install the gcc make perl packages from your distribution。 执行命令行&#xff1a;yum install gcc perl make 输出&#xff1a; Loaded plugins: product-id, search-dis…

iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度

1.让图片旋转 UIImageView *imageView [[UIImageView alloc]init]; imageView.frame CGRectMake(50, 50, 200, 200); imageView.image [UIImage imageNamed:"460.jpg"]; CGAffineTransform transform CGAffineTransformMakeRotation(M_PI*0.38); imageView.tr…

致毕业生:那些年我们错过的“BAT”

本文旨在用最通俗的语言讲述最枯燥的基本知识最近看到公众号中各种推“招聘季金九银十铜十二”之类的文章&#xff0c;把毕业季找工作需要应对的事情和解决方法都已经写的很详细了&#xff0c;还有各种面经考经挥之即来&#xff0c;已经没必要再去写这样的一个文章了&#xff0…

PHP函数收藏---不断更新中!

替换html标签 function strip_bad_tags($html) { $s preg_replace ("?[^>]*>*", "", $html); return $s; } 替换指定tag,$text是需要替换的文本,tags 是需要替换标签的数组 function strip_selected_tags($text, $tags array()) { $args func_ge…

gcc 5.2.0 手动更新(亲测)

注意:(不要在gcc-5.2.0 源码目录中执行 configure&#xff0c;否则会报错)安装操作如下&#xff1a;0、yum 安装 gcc yum -y install gcc gcc-c libstdc libstdc-devel autoconf makegcc-5.2.0 下载地址&#xff1a;ftp://gcc.gnu.org/pub/gcc/releases/gcc-5.2.0/gcc-5.2.0…

Lie to me不错

最近Fox的新剧有个Lie to me不错&#xff0c;如果你腻了了没完没了的Lost&#xff0c;觉得Hero开始离谱了&#xff0c;Prison Break只能重看第一季了&#xff0c;怀念Friends的经典又不忍心再看第10遍的话&#xff0c;这个剧是个不错的选择。 看了一集了&#xff0c;每个人平均…

NLog 简单使用

1.安装NLog 使其集成到VS 里 下载地址&#xff1a; http://nlog-project.org/ 2.NLog.config <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi"http://www.w3.or…