JSTL 让我们java代码在jsp中更直观,有时候我们需要自己实现标签。本文用一个简单的例子来说明如何实现自定义标签。
step1 编写java类继承 SimpleTagSupport 并在doTag方法中添加处理逻辑
step2 配置标签说明文件
step3 在页面使用标签
准备工作:创建一个web project ,将tomcat lib下的jsp-api.jar和servlet-api.jar两个jar包导入项目中去。
现想自定义一个标签 用于在页面上显示某个字符串及次数
1.创建HelloTag.java
package com.qiang.web.jstl;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class HelloTag extends SimpleTagSupport{
private String str;
private int count;
@Override
public void doTag()throws JspException, IOException{
PageContext cxt = (PageContext) getJspContext();
JspWriter out = cxt.getOut();
for (int i = 0; i < count; i++) {
out.println(str+"<br/>");
}
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
该类继承
SimpleTagSupport 并重写
doTag()方法 。在页面上显示count次str
2.添加myTag.tld文件
在web-inf下添加myTag.tld 文件,格式参考c.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.2</tlib-version>
<short-name>c3</short-name>
<uri>http://jstl.web.qiang.com/myTag</uri>
<tag>
<description>根据指定的次数打印文本.</description>
<name>pt</name>
<tag-class>com.qiang.web.jstl.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>Content</description>
<name>str</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>Count</description>
<name>count</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
节点说明:
short-name :自定义的prefix
uri:自定义的URI
name:自定义标签名称
attribute:对应类的变量属性
3.使用标签
此时标签以定义好,在webRoot下添加myTag.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.qiang.web.jstl.*" %>
<%@ taglib prefix="c3" uri="http://jstl.web.qiang.com/myTag" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>标签 jsp</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<c3:pt count="10" str="Hello world"></c3:pt>
</body>
</html>
使用该标签
<%@ taglib prefix="c3" uri="http://jstl.web.qiang.com/myTag" %>
引用自定义标签prefix和uri
<c3:pt count="10" str="Hello world"></c3:pt>
使用pt标签 count和str对应配置文件和java类的count和str属性。
运行tomca并在浏览器输入对应的jsp路径
页面显示10测jello world。自定义标签成功!