自定义标签
导包
<!-- jsp自定义标签 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
定义标签类
- 继承OutSupport类
- 重写doStartTag方法
- 页面属性需要类中相应成员及setter方法
- setter中处理el表达式
public class MyTag extends OutSupport {
// 页面标签中的属性,必须包含set方法
private String number;
public void setNumber(String number) throws JspException {
// 对el表达式的处理
Object num = ExpressionEvaluatorManager.evaluate("number", number.toString(), Object.class, this, pageContext);
String number1 = (String) num;
StringBuffer buffer = new StringBuffer(number1);
int length = buffer.length();
// 每隔4位数字插入一个空格
for (int cnt = 4;cnt < length;cnt+=4){
buffer.insert(cnt, ‘ ‘);
cnt++; //插入空格时,需要偏移一位
length++; //插入时长度也会改变
}
this.number = buffer.toString();
}
StringWriter sw = new StringWriter();
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.write(number);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}
tld文件
- 文件位置在WEB-INF中,需要在jsp页面中引用
属性 |
描述 |
name |
定义属性的名称。每个标签的是属性名称必须是唯一的 |
required |
指定属性是否是必须的或者可选的,如果设置为false为可选。 |
rtexprvalue |
声明在运行表达式时,标签属性是否有效。 |
type |
定义该属性的Java类类型 。默认指定为 String |
description |
描述信息 |
fragment |
如果声明了该属性,属性值将被视为一个 JspFragment。 |
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>Hello</name>
<tag-class>com.hd.tag.MyTag</tag-class>
<attribute>
<name>number</name>
<!--定义此属性必须存在-->
<required>true</required>
<!--EL表达式支持-->
<rtexprvalue>true</rtexprvalue>
<!--类型,默认String-->
<type>java.lang.String</type>
<!--说明-->
<description>This is number attribute.</description>
</attribute>
<body-content>empty</body-content>
</tag>
</taglib>
jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%--引用WEB-INF下custom.tld标签,前缀xyg--%>
<%@ taglib uri="/WEB-INF/custom.tld" prefix="xyg"%>
<html>
<head>
<title>VMDS</title>
</head>
<body>
<%--在标签中name属性为Hello的类作为处理--%>
<xyg:Hello number="${num}"></xyg:Hello>
</body>
</html>
JSP相关