首页 > 学院 > 开发设计 > 正文

自定义标签

2019-11-08 00:52:35
字体:
来源:转载
供稿:网友
自定义标签 tld文件:taglib description 的缩写,标签库描述文件。编写流程 1 编写实现类2 编写配置文件tld3 在jsp中使用编写流程实现 1 编写实现类 传统标签:Tag接口,编写繁琐,不适合初学者。实现类:TagSupport 简单标签:SimpleTag接口,实现类:SimpleTagSupport 【使用】2 编写配置文件tld tld文件基于xml,内容是xml,扩展名为tld。需要特殊的编辑器处理。 文件名称:自定义 文件位置: WEB INF目录下,除classes和lib目录 WEB INF/lib目录中jar文件中,META INF目录3 在jsp中使用 引用:<%@ taglib uri=”” PRefix=”“%> @taglib对指定的标签库进行引用的 uri,确定使用的哪一个标签库 (a标签)prefix,前缀 自定义(xx)

实现类:

package com.myweb.tag;import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.servlet.jsp.JspContext;import javax.servlet.jsp.JspException;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.JspTag;import javax.servlet.jsp.tagext.SimpleTag;public class MyTag implements SimpleTag { private PageContext pageContext; private JspFragment jspBody; //获得标签体 /** * 1 */ public void setJspContext(JspContext pc) { this.pageContext = (PageContext) pc; } //提供页面属性attribute对应的 类的属性property的set方法 private Map items; private String var; /** * 2 * @param items */ public void setItems(Map items) { this.items = items; } public void setVar(String var) { this.var = var; } /** * 3 获得标签体 */ public void setJspBody(JspFragment jspBody) { this.jspBody = jspBody; } /** * end */ public void doTag() throws JspException, IOException { Set set2 = items.entrySet(); Iterator it2 = set2.iterator(); while(it2.hasNext()){ Object obj = it2.next(); Map.Entry entry = (Map.Entry)obj; //将entry放置到域中,el必须从域中获取内容 pageContext.setAttribute(var, entry); //page //循环一次标签体输出一次 this.jspBody.invoke(this.pageContext.getOut()); //将标签体的内容输出到指定的流中 } } @Override public void setParent(JspTag parent) { } @Override public JspTag getParent() { return null; }}

tld文件:

<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 确定标签库的版本 --> <tlib-version>1.0</tlib-version> <!-- 建议再jsp引用时,使用的前缀名称 --> <short-name>my</short-name> <!-- 给每一个标签库进行命名,建议全球唯一,URL --> <uri>http://www.myweb.com/mytag</uri> <!-- tld配置文件与 实现类关联 --> <!-- 配置循环 标签 --> <tag> <name>forEach</name> <tag-class>com.myweb.tag.MyTag</tag-class> <!-- empty : 没有标签体 scriptless : 不支持jsp脚本 <%%>,但支持el表达式 JSP : 支持jsp所有功能,但只有传统标签可以使用。SimpleTag简单标签不能使用 tagdependent : 此标签在内部使用,一般不使用 --> <body-content>scriptless</body-content> <!-- 声明属性 items --> <attribute> <!-- 实现必须通过property set方法获得数据 --> <!-- 属性的名称 --> <name>items</name> <!-- 必须填写 --> <required>true</required> <!-- runtime expressions 是否支持运行时表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <!-- 声明属性 var --> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag></taglib>

jsp文件:

<%@page import="java.util.HashMap"%><%@page import="com.myweb.bean.Person"%><%@page import="java.util.Map"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://www.myweb.com/mytag" prefix="my" %><!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><hr><br> <% //准备数据 Map<String,Person> personMap = new HashMap<String,Person>(); personMap.put("001", new Person("p001","Uzi","18")); personMap.put("002", new Person("p002","Deft","19")); personMap.put("003", new Person("p003","Impl","20")); pageContext.setAttribute("personMap", personMap); //page作用域 %> <!-- 使用测试 --> <my:forEach items="${personMap}" var="entry"> ${entry.key} ===> ${entry.value} <br/> </my:forEach></body></html>

结果:

结果


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表