`
modabobo
  • 浏览: 510068 次
文章分类
社区版块
存档分类
最新评论

JSP2.0自定义标签

 
阅读更多

JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法。

JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件。tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码。

按照约定,tag和tagx文件需要放置在WEB-INF/tags目录下。

下面是一些简单的示例:

1.简单地显示时间time.tag

<%@ tag import="java.util.*" import="java.text.*" %>
<%
  DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
  Date d = new Date(System.currentTimeMillis());
  out.println(df.format(d));
%>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
<html>
  <head>
  </head>
  <body>
     Today is <util:time/>.
  </body>
</html>
2.复制字符串多少遍repeater.tag

<%@ attribute name="count" type="java.lang.Integer" required="true" %>
<%@ attribute name="value" type="java.lang.String" required="true" %>
<%!
  private String repeater(Integer count, String s) {
    int n = count.intValue();
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < n; i++) {
      sb.append(s);
    }
    return sb.toString();
  }
%>
<%
  out.println(repeater(count, value));
%>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
<html>
  <head>
  </head>
  <body>
    Let's get some sleep! <util:repeater count='${3 * 10}' value='zzz'/>
  </body>
</html>
3.查找省份lookup.tag

<%@ tag import="java.util.*" %>
<%@ attribute name="cityName" required="true" %>
<%@ variable name-given="province" %>
<%@ variable name-given="population" variable-class="java.lang.Integer" %>
<%
  if ("Toronto".equals(cityName)) {
    jspContext.setAttribute("province", "Ontario");
    jspContext.setAttribute("population", new Integer(2553400));
  }
  else if ("Montreal".equals(cityName)) {
    jspContext.setAttribute("province", "Quebec");
    jspContext.setAttribute("population", new Integer(2195800));
  }
  else {
    jspContext.setAttribute("province", "Unknown");
    jspContext.setAttribute("population", new Integer(-1));
  }
%>
<jsp:doBody/>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
<html>
  <head>
  </head>
  <body>
    <% pageContext.setAttribute("cityName", "Montreal"); %>
    <util:lookup cityName="${cityName}">
      ${cityName}'s province is ${province}.
      ${cityName}'s population is approximately ${population / 1000000} million.
    </util:lookup>
  </body>
</html>
上面的都是使用的经典jsp代码,下面将第3个示例使用其他代码实现:

*使用标签:

<%@ tag import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="cityName" required="true" %>
<%@ variable name-given="province" %>
<%@ variable name-given="population" %>
<c:choose>
  <c:when test="cityName eq 'Toronto'>
    <c:set var="province" value="Ontario"/>
    <c:set var="population" value="2553400"/>
  </c:when>
  <c:when test="cityName eq 'Montreal'>
    <c:set var="province" value="Quebec"/>
    <c:set var="population" value="2195800"/>
  </c:when>
  <c:otherwise>
    <c:set var="province" value="Unknown"/>
    <c:set var="population" value="-1"/>
  </c:otherwise>
</c:choose>
%>
<jsp:doBody/>
<%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
  </head>
  <body>
    <c:set var="cityName" value="Montreal"/>
    <util:lookup cityName="${cityName}">
      ${cityName}'s province is ${province}.
      ${cityName}'s population is approximately ${population / 1000000} million.
    </util:lookup>
  </body>
</html>
*使用jsp指令,通常这种方式生成xml格式的文件

<?xml version='1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page">
	<jsp:directive.tag import="java.util.*"/>
	<jsp:directive.taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"/>
	<jsp:directive.attribute name="cityName" required="true"/>
	<jsp:directive.variable name-given="province"/>
	<jsp:directive.variable name-given="population"/>
	<c:choose>
	  <c:when test="cityName eq 'Toronto'>
	    <c:set var="province" value="Ontario"/>
	    <c:set var="population" value="2553400"/>
	  </c:when>
	  <c:when test="cityName eq 'Montreal'>
	    <c:set var="province" value="Quebec"/>
	    <c:set var="population" value="2195800"/>
	  </c:when>
	  <c:otherwise>
	    <c:set var="province" value="Unknown"/>
	    <c:set var="population" value="-1"/>
	  </c:otherwise>
	</c:choose>
</jsp:root>
<?xml version='1.0'?>
<jsp:root version='2.0'
          xmlns:jsp="http://java.sun.com/JSP/Page"
          xmlns:util="urn:jsptagdir:/WEB-INF/tags"
          xmlns:c="http://java.sun.com/jsp/jstl/core">
  <jsp:directive.page contentType="text/html"/>          
	<html>
	  <head>
	  </head>
	  <body>
	    <c:set var="cityName" value="Montreal"/>
	    <util:lookup cityName="${cityName}">
	      ${cityName}'s province is ${province}.
	      ${cityName}'s population is approximately ${population / 1000000} million.
	    </util:lookup>
	  </body>
	</html>
</jsp:root>


附录:

标签文件中常用的指令:

tag 类似JSP page指令,可以用于import常用的java类库等
include 导入其他的标签定义文件
taglib 使用其他标签,如jstl, spring tag, struts tag等等
attribute 定义一个属性
variable 定义一个jsp page中可见的变量,默认范围为NESTED,表示标签内有效。可选项有AT_BEGIN和AT_END

这些指令的可选属性

body-content 标签body的处理方式 ,可选项: 'empty', 'tagdependent' or 'scriptless'
import 导入使用的java类库
pageEncoding 设置页面编码
isELIgnored 是否忽略el表达式
dynamic-attributes 用于存储自定义属性的map,所谓的自定义属性指:未隐式申明的变量
language 使用的脚本语言,目前必须是java
display-name 标签名
small-icon for tools
large-icon for tools
description 标签作用描述
example informal description of how the tag is used
<jsp:directive:attribute>的可选属性

name 属性名
required true or false
rtexprvalue true or false - 指定是否支持运行时表达式
type 值类型 - 默认是java.lang.String
fragment true or false - 值先传递给容器(false), 直接传给标签处理方法(true)
description 属性描述

<jsp:directive:variable>的可选属性

name-given 变量名(标签使用时的变量名)
name-from-attribute Specifies the name of an attribute, whose value is the name of the variable that will be available in the calling JSP page. Exactly one of name-given or name-from-attribute must be supplied.
alias A locally scoped variable which will store the variable's value. Used only with name-from-attribute.
variable-class 变量类.默认是java.lang.String.
declare Indicates whether the variable is declared in the calling JSP page or tag file. Default is true. Not entirely clear what this means!
scope 变量范围,可选项 AT_BEGIN(标签后jsp page内有效), AT_END(标签后jsp page内有效) and NESTED. NESTED(默认,标签内有效)
description 变量描述











分享到:
评论

相关推荐

    jsp2.0 自定义标签和自定标签函数

    文件包括jsp2.0 自定义标签的配置,和使用说明。 一看就明白。希望对你有用

    JSP2.0技术手册pdf(带示例源码).zip

    书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术...

    jsp自定义标签开发+TLD文件元素详解+实例

    jsp自定义标签开发+TLD文件元素详解+实例;从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且...Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类SimpleTagSupport。

    基于SSH框架的音乐网站设计与实现

    网站重点实现了单态登录、管理员权限控制、静态信息的码表结构、HTML5播放器、推荐算法等功能,并利用JSP 2.0自定义标签极大地实现了页面复用。 全文共分为技术简介、需求分析、总体设计、详细设计、系统测试、总结...

    Tag的使用<JSP 2.0新特性>

    这是一个Tag文件使用的一个实例...它的是简化了自定义标签,呵呵...不准确.

    JSP 自定义标签

    JSP 自定义标签 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。 JSP标签扩展...

    JSP自定义标签入门学习

    本文为大家分享了JSP自定义标签入门学习教程,希望大家喜欢。 1.JSP自定义标签: 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作...

    自定义table标签和数据展现控件(源码)

    特点 在上个table标签的基础上修改了部分代码,支持firefox. 新增数据展现控件以便定制更加复杂的table. 1、JSP2.0标准自定义标签 2、支持数据库后台翻页 3、支持排序 4、支持firfox 4、使用...

    JSP定制标实例

    但由于JSP的标准操作、JSTL定义的标签满足不了用户的所有要求,所以在JSP2.0中允许用户可根据需要创建自己的标签库,即自定义标签库。 用户自定义标签和JSTL中的标签从技术上看没有任何区别,可以将这些标签统称为...

    自定义table标签

    特点 1、JSP2.0标准自定义标签 2、支持数据库后台翻页 3、支持排序 4、使用简单、灵活 5、支持导出Excel(正在进行.....) &lt;br&gt;示例 http://www.lifespanaustralia.com/doit8taglib/table.jsp

    JSP宝典(PDF)

    第二部分详细对自定义标签开发、标准标签库(JSTL)使用、JSP2.0表达式(EL)、Servlet简单应用和高级应用以及讲解了Web2.0新特性Ajax的开发过程。JSP宝典的第三部分对最为流行的MVC解决方案Struts和数据库持久层...

    Jsp宝典 PDF

    第二部分详细对自定义标签开发、标准标签库(JSTL)使用、JSP2.0表达式(EL)、Servlet简单应用和高级应用以及讲解了Web2.0新特性Ajax的开发过程。JSP宝典的第三部分对最为流行的MVC解决方案Struts和数据库持久层...

    JSP宝典

    资源名称:JSP宝典内容简介:JSP是当前开发Web应用最流行的技术,它得到J2EE很好的支持。... 然后对自定义标签开发、标准标签库(JSTL)使用、JSP2.0 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    JSP技术资料合集之三

    commons-el-1.0 devguide1_2_1.pdf el-jstl.txt EL.doc El表达式介绍.doc Expression Language.pdf jbp1-0-1.pdf jsp-2_1-fr-spec.pdf JSP-zh.pdf jsp.chm ...掌握自定义JSP标签.chm 表达式语言(EL).pdf

    JSP技术资料合集之二

    commons-el-1.0 devguide1_2_1.pdf el-jstl.txt EL.doc El表达式介绍.doc Expression Language.pdf jbp1-0-1.pdf jsp-2_1-fr-spec.pdf JSP-zh.pdf jsp.chm ...掌握自定义JSP标签.chm 表达式语言(EL).pdf

    JSP技术资料合集之一

    commons-el-1.0 devguide1_2_1.pdf el-jstl.txt EL.doc El表达式介绍.doc Expression Language.pdf jbp1-0-1.pdf jsp-2_1-fr-spec.pdf JSP-zh.pdf jsp.chm ...掌握自定义JSP标签.chm 表达式语言(EL).pdf

    jsp宝典源码

    然后对自定义标签开发、标准标签库(JSTL)使用、JSP2.0表达式(EL)、Servlet简单应用和高级应用以及Web2.0新特性Ajax的开发过程进行了详细的讲解。最后对最为流行的MVC解决方案Struts和数据库持久层结束Hibernate...

    EL AND JSTL概述

    因此,只要是支持Servlet 2.4 / JSP2.0 的Container,就都可以在JSP 网页中直接使用EL 了。 除了JSP 2.0 建议使用EL 之外,JavaServer Faces( JSR-127 ) 也考虑将EL 纳入规范,由此可知,EL 如今已经是一项成熟、...

    EL基本手册

    到了JSP2.0之后,EL已经正式纳入成为标准规范之一。因此,只要是支持Servlet 2.4 / JSP 2.0的Container,就都可以在JSP网页中直接使用EL了。 除了JSP2.0建议使用EL之外,JavaServer Faces( JSR-127 ) 也考虑将EL纳入...

    自定义日历标签

    网页上显示日历,自定义的标签 !DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"&gt; &lt;tlib -version&gt;1.0 &lt;jsp -...

Global site tag (gtag.js) - Google Analytics