JSP相关

自定义标签

导包

    <!-- 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相关

JSP相关

上一篇:MySQL教程105-MySQL修改存储过程


下一篇:一起学Vuejs(二十一)----- 箭头函数