JSP自定义标签

阅读更多
一、如何自定义标签:
     自定义标签功能要求在后台必须有一个相关的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. 开发标签,知道这个标签用于干什么的。设计好模板。并设计好该标签显示的值的来源。


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( "Hello World !_" + name + "");//标签占的坑 要显示这些值   
        } catch (IOException ex) {   
           throw new JspTagException( "错误");   
        }
        return EVAL_PAGE;   
    }   
}



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

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


tld文件如下:


      

     1.0 
     1.2 
     myTag_HW 
     
     
           helloworld
           com.piedra.tag.HelloWorldTag
           empty 
     


3. 在web.xml中配置标签的信息 taglib-uri 和 tld描述文件的地址 taglib-location

     
           / tlds/hw 
           /WEB-INF/ tlds/helloworld.tld
     
    


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

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



  
  
 
  
    This is my JSP page. 


zzzzzzzzzzzzzzzzzzzzzzzzz


备注: 在上面的例子中还调用了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对应的配置:
 
           /tag_1.jsp
         


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


效果图如下:
JSP自定义标签_第1张图片

【引用:】http://blog.csdn.net/liangbinny/article/details/6309893
  • JSP自定义标签_第2张图片
  • 大小: 27.1 KB
  • 查看图片附件

你可能感兴趣的:(jsp,java,struts)