`

java--自定义标签(tag、tld两种)

阅读更多

1.一篇不错的 java自定义标签的文章地址:http://gaoshu2006.blog.sohu.com/113222643.html

2.sun公司java自定义标签原文地址:http://java.sun.com/developer/technicalArticles/xml/WebAppDev3/

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

jsp自定义标签 Tag文件版

 

实现一个与上篇文章类似的Select标签功能
1.在WEB-INF/tags/select.tag

<%@ tag body-content="empty" %>
<%@ tag dynamic-attributes="tagAttrs" %>
<%@ attribute name="optionsList" type="java.util.List" required="true" rtexprvalue="true"%>
<%@ attribute name="name" required="true"%>
<%@ attribute name="size" required="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>


<select name="${name }" size="${size }"
   <c:forEach var="attrEntry" items="${tagAttrs }">
     ${attrEntry.key}="${attrEntry.value }"
   </c:forEach>
>
   <c:forEach var="option" items="${optionsList}">
     <option value="${option }">${option}</option>
    </c:forEach>
 </select>
这里要注意tag文件只能放在如下位置:
1.WEB-INF/tags
2.WEB-INF/tags的子目录
3.WEB-INF/lib中jar包的META-INF/tags
4.WEB-INF/lib中jar包的META-INF/tags下的子目录
5.jar包中的tag文件需要tld
添加jstl.jar与standard.jar到WEB-INF/lib目录,还有一点就是上面标红的部分:不要使用http://java.sun.com/jstl/core这个url,否则会报foreach中的item属性有问题

2.在jsp中的使用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="formTag" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
 List<String> colorList = new ArrayList<String>();
    colorList.add("red");
    colorList.add("blue");
    colorList.add("white");
    request.setAttribute("colorList",colorList);
%>

<form action="" method="post">
 <formTag:select name="color" size="1" optionsList="${requestScope.colorList}"  style="width:140px"/>
</form>
</body>
</html>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

jsp 自定义标签

 

jsp标签有两组api
JspTag ->SimpleTag ->SimpleTagSupport
JspTag ->Tag ->IterationTag->BodyTag
第二组是classic的,比较早的使用方式,doStartTag(),doEndTag()有N多返回值的那种,使用起来也确实不方便,今天学到了另一个使用第一组api方式的,让人大快人心,贴码
例子是一个Select的标签,支持动态属性设置
1.编写标签类

public class SelectTagHandler extends SimpleTagSupport implements DynamicAttributes {
 private static final String ATTR_TEMPLATE = "%s='%s'";
 private static final String OPTION_TEMPLATE = "<option value='%1$s'>%1$s</option>";
 private List optionsList;
 private String name;
 private String size;
 private Map<String, Object> tagAttrs = new HashMap<String, Object>();

 public void setName(String name) {
  this.name = name;
 }

 public void setSize(String size) {
  this.size = size;
 }

 public void setOptionsList(List optionsList) {
  this.optionsList = optionsList;
 }

 @Override
 public void doTag() throws JspException, IOException {
  PageContext pageContext = (PageContext) getJspContext();
  JspWriter out = pageContext.getOut();
  out.print("<select ");
  out.print(String.format(ATTR_TEMPLATE, "name", this.name));
  out.print(String.format(ATTR_TEMPLATE, "size", this.size));
  for (String attrName : tagAttrs.keySet()) {
   String attrDefinition = String.format(ATTR_TEMPLATE, attrName, tagAttrs.get(attrName));
   out.print(attrDefinition);
  }
  out.print(">");

  for (Object option : this.optionsList) {

   String optionTag = String.format(OPTION_TEMPLATE, option.toString());
   out.println(optionTag);
  }
  out.println("</select>");
 }

 @Override
 public void setDynamicAttribute(String uri, String name, Object value) throws JspException {
  tagAttrs.put(name, value);
 }
}
看到没,代码如此的简洁,动态属性配置也十分的方便,不用写N多个setter与getter方法.

2.编写tld文件WebRoot/tld/select.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3g.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
 <tlib-version>1.2</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>Forms Taglib</short-name>
 <uri>http://hi.baidu.com/tags/forms</uri>
 <description>
  An example tab library of replacements for the html form tags.
 </description>
 
 <tag>
  <name>select</name>
  <tag-class>com.baidu.hi.tag.SelectTagHandler</tag-class>
  <body-content>empty</body-content>
  
  <attribute>
   <name>optionsList</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   <type>java.util.List</type>
  </attribute>
  
  <attribute>
   <name>name</name>
   <required>true</required>
  </attribute>
  
  <attribute>
   <name>size</name>
   <required>true</required>
  </attribute>
  
  <dynamic-attributes>true</dynamic-attributes>
 </tag>
</taglib>


3.在jsp中的使用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
<%@ taglib  prefix="formTags"  uri="/tld/select.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="java.util.ArrayList"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
 List<String> colorList = new ArrayList<String>();
    colorList.add("red");
    colorList.add("blue");
    colorList.add("white");
    request.setAttribute("colorList",colorList);
%>
<form action="" method="post">
 <formTags:select name="color" size="1" optionsList="${requestScope.colorList}" style="width:140px"/>
</form>
</body>
</html>

 

分享到:
评论
1 楼 mmddonkey 2014-06-11  
居然一下就搜到这了 哈哈

相关推荐

    java自定义标签、自定义函数、taglib

    它们是JSP(JavaServer Pages)标准标签库(JSTL)的一种扩展,允许开发者创建符合特定业务逻辑的自定义组件,从而将视图层与业务逻辑分离,实现MVC架构。本文将深入探讨这两个概念以及如何使用`taglib`进行定义和...

    java自定义标签教程

    总的来说,Java自定义标签提供了一种强大的方式来扩展JSP,使得开发者能够创建符合业务需求的定制化组件,提高了代码的复用性和灵活性。通过理解标签的生命周期和接口的使用,可以更有效地开发和维护JSP应用。

    jsp 自定义标签实例

    首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们分别在标签开始和结束时被调用。`TagSupport`类是`Tag`...

    Web2.0体系学习(自定义标签)

    自定义标签通常由两个主要部分组成:标签库描述符(TLD,Tag Library Descriptor)和标签处理类(Tag Handler Class)。TLD是XML文件,用于定义标签的元数据,包括标签的名字、属性、返回的值类型等。而标签处理类则...

    Java自定义标签开发.zip

    自定义标签的实现分为两种主要方式:简单标签(Simple Tags)和标准标签库(JSTL)中的标签。简单标签是Java 5引入的新特性,适用于处理简单的逻辑,而标准标签库中的标签通常用于更复杂的任务,如国际化、XML处理等...

    创建JSP自定义标签.doc

    在JavaServer Pages (JSP)开发中,自定义标签是一种强大的工具,可以提高代码的可读性和可维护性。它们允许开发者封装复杂的逻辑或组件为简洁的标签形式,类似于HTML标签。本篇将详细介绍如何创建JSP自定义标签。 ...

    JSTL自定义标签实例解析

    总结来说,JSTL自定义标签提供了一种高效且可重用的方法来扩展JSP的功能。通过编写处理类和定义TLD,我们可以创建符合特定需求的标签,使JSP页面更加简洁、易于维护。在实际应用中,自定义标签可以极大地提高代码的...

    Java自定义分页标签

    本篇文章将详细讲解如何创建并使用一个Java自定义分页标签。 首先,我们需要了解什么是自定义标签(Custom Tags)。在JSP中,自定义标签是一种扩展JSP功能的方法,它允许开发者封装复杂的逻辑或组件,以标签的形式...

    JSP应用开发-自定义标签的使用.pptx

    每个标签库都通过一个TLD(Tag Library Descriptor)文件来描述,这个文件是XML格式,包含了标签的元数据,如标签名称、对应的Java类、属性等。 **3. 标签处理类** 每个自定义标签对应一个Java类,这个类负责处理...

    jsp的自定义标签

    自定义标签的实现有两种方式: - **简单标签(Simple Tag)**:适用于标签处理逻辑相对简单的场景,处理类只需要实现`javax.servlet.jsp.tagext.SimpleTag`接口,其中的`doTag()`方法负责执行标签逻辑。 - **全...

    自定义标签分页

    1. **创建TLD文件**:TLD(Tag Library Descriptor)文件定义了自定义标签的行为、属性及其关联的Java类。例如,你可以创建一个名为`fenyeTag.tld`的文件,其中包含分页标签的相关信息,如标签名称、描述、属性等。 ...

    jsp java自定义标签 分页 当前位置 循环遍历数据

    Java自定义标签的实现通常涉及两个主要部分:标签处理类(Tag Handler)和标签库描述文件(TLD,Tag Library Descriptor)。 在本例中,我们继承了`javax.servlet.jsp.tagext.TagSupport`类来创建自定义标签处理类...

    servlet+ 自定义标签

    ### servlet与自定义标签知识点详解 #### 一、Servlet概述 Servlet是一种服务器端的应用程序接口(API),主要用于构建动态Web应用程序。它比JSP技术出现得更早,...掌握这两种技术,对于深入理解Web开发有着重要意义。

    Java中自定义标签的使用

    自定义标签由两部分组成:标签处理程序类(Tag Handler Class)和标签库描述符(TLD,Tag Library Descriptor)。 2. **创建自定义标签** 创建自定义标签涉及以下步骤: - 定义处理程序类:这个类需要继承自`...

    权威实用jsp自定义标签demo<select,checkbox,radio>

    在JSP中,自定义标签通常由两部分组成:标签库描述文件(TLD,Tag Library Descriptor)和标签处理类(Tag Handler Class)。TLD用于定义标签的元数据,包括标签名称、属性、导出的标签库等信息;而标签处理类则实现...

    java jsp 自定义标签开发

    总的来说,Java JSP自定义标签的开发提供了一种强大的工具,使得开发者能够构建更加灵活且易于维护的JSP应用。通过自定义标签,可以将复杂的业务逻辑封装起来,降低视图层的复杂度,提高代码的可重用性和可维护性。...

    JSP自定义标签详解

    4. 标签处理类(Tag Handle Class):处理类是Java类,通常继承自TagSupport或实现了SimpleTag接口,负责实现自定义标签的功能。 二、自定义JSP标签的格式: 1. 使用自定义标签需要指定标签库的前缀(Prefix),前缀...

    java+web自定义标签的开发与应用源码整理

    在Java Web开发中,自定义标签通常由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD,Tag Library Descriptor)。标签处理类实现了自定义标签的行为,而TLD文件则定义了标签的属性、事件以及与处理类...

    jstl1.1 tld文件

    在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一种标准标签库,用于增强JSP页面的功能,使其更加简洁和可维护。JSTL 1.1是该库的一个版本,提供了多种处理常见Web任务的标签,如迭代、条件...

    java自定义标签的使用.pdf

    总结来说,Java自定义标签提供了一种模块化和可复用的机制,使得JSP页面的编写更加灵活和高效。通过创建标签处理程序和定义TLD文件,开发者可以创建出符合业务需求的自定义标签,提高代码质量和开发效率。

Global site tag (gtag.js) - Google Analytics