JSP自定义标签_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > JSP自定义标签

JSP自定义标签

 2013/10/29 16:00:07  忆梦竹  程序员俱乐部  我要评论(0)
  • 摘要:一、如何自定义标签:自定义标签功能要求在后台必须有一个相关的JAVA类的支持,但并不是任意编写一个JAVA类就能处理JSP标签,这个类也必须实现指定的规范才能用于支持JSP标签,这些规范表现形式也是接口和类,他们在javax.serviet.jsp.tagext包中声明,主要接口/类描述如下:javax.servlet.jsp.tagext.Tag接口,所有处理JSP标签的类必须实现该接口。该接口中声明了6个方法,如果直接从该接口生成类则必须实现所有的6个方法
  • 标签:自定义 JS
一、如何自定义标签:
     自定义标签功能要求在后台必须有一个相关的JAVA类的支持,但并不是任意编写一个JAVA类就能处理JSP标签,这个类也必须实现指定的规范才能用于支持JSP标签,这些规范表现形式也是接口和类,他们在 javax.serviet.jsp.tagext包中声明,主要接口/类描述如下:
javax.servlet.jsp.tagext.Tag接口,所有处理JSP标签的类必须实现该接口。该接口中声明了6个方法,如果直接从该接口生成类则必须实现所有的6个方法,通常不会直接通过该接口生成标签的处理类。

javax.servlet.jsp.tagext.TagSupport 类 该类实现了 Tag 接口,用于创建不带标记体的自结束标签,这些标签中可以带属性。 javax.servlet.jsp.tagext.BodyTagSupport 类 该类继承了 TagSupport 类,用于创建带标记体的标签。

TagSupport 类中有一个重要的成员: pageContext ,该成员的功能与 JSP 的内置对象 pageContex 完全相同。通过该对象可以得到其他几个 JSP 对象的引用。这样,我们就可以在 JAVA 类中与JSP 进行交互了。如JspWriter out=pageContext.getOut(); 这一语句可以得到 JSP 内置对象out 的引用,通过 out 我们就可以向客户端浏览器中输出内容了。要使用其他几个 JSP 对象原理与此相同。

通常我们自定义的标签,编写处理程序时使用TagSupport 和BodyTagSupport 即可,不需要涉及到标签体的,继承TagSupport,需要用标签体的继承BodyTagSupport



二、开发例子
1. 开发标签,知道这个标签用于干什么的。设计好模板。并设计好该标签显示的值的来源。


class="java" name="code">package com.piedra.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloWorldTag extends TagSupport{

     private static final long serialVersionUID = 1L;

     @Override
    public int doStartTag() throws JspException {   
       try {
        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
        String name = (String)request.getAttribute("name" );
           pageContext.getOut().write( "<font style='color:red;'>Hello World !_" + name + "</font>");//标签占的坑 要显示这些值   
        } catch (IOException ex) {   
           throw new JspTagException( "错误");   
        }
        return EVAL_PAGE;   
    }   
}



2. 编写标签类的tld文件,指明要编写的标签类可以传入什么内容,等
   如果要学习如何向标签类传入属性值,设置
      <attribute></attribute>

比如:
< attribute>
     < name> num2 </name >
     < required> true </required >
     < rtexprvalue> true </rtexprvalue >
</ attribute>


tld文件如下:
<?xml version= "1.0" encoding ="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
      
<taglib>
     <tlib-version >1.0 </tlib-version>
     <jsp-version >1.2 </jsp-version>
     <short-name >myTag_HW </short-name>
     
     <tag >
           <name >helloworld</name>
           <tag-class >com.piedra.tag.HelloWorldTag</ tag-class>
           <body-content >empty </body-content>
     </tag >
</taglib>


3. 在web.xml中配置标签的信息 taglib-uri 和 tld描述文件的地址 taglib-location
<jsp-config >
     <taglib >
           <taglib-uri >/ tlds/hw </taglib-uri>
           <taglib-location >/WEB-INF/ tlds/helloworld.tld</taglib-location >
     </taglib >
    </jsp-config >


4. 之后就能够在jsp引入该标签和使用该标签

<%@ page language ="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib prefix ="piedra" uri="/tlds/hw" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head >
  </head >
 
  <body >
    This is my JSP page. <br >
    <hr />
    <piedra:helloworld />
    <hr />
    zzzzzzzzzzzzzzzzzzzzzzzzz 

  </body >
</html>


备注: 在上面的例子中还调用了Struts2实现的TagAction,在TagAction中我们在request域中设置了key为name的属性值。然后就直接返回并跳转到我们的jsp页面
package com.piedra.action.tag;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class TagAction extends ActionSupport{
     private static final long serialVersionUID = 1L;
     
     public String execute(){
          TagAction. setRequestAttribute("name","yourname");
           return "success";
     }
     
     public static void setRequestAttribute(String key,Object obj){
          ServletActionContext. getRequest().setAttribute(key, obj);
     }
}


action对应的配置:
 <action name ="tagAction" class= "com.piedra.action.tag.TagAction" >
           <result name ="success">/tag_1.jsp</result >
        </action > 


备注:如果你没有使用struts,用servlet也是一样的,只需要在doGet或者doPost方法中写上request域的设置值的情况也可以。


效果图如下:


【引用:】http://blog.csdn.net/liangbinny/article/details/6309893
  • 大小: 27.1 KB
  • 查看图片附件
发表评论
用户名: 匿名