编写定制标签分为三个步骤:编写标签处理器、配置标签、使用标签。

1.标签处理器

标签处理器和标签是一一对应的关系

package com.oolong.utils.customtags;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
 
import com.oolong.personal.model.KLPointModel;
import com.oolong.utils.tree.TreeModel;
 
public class ShowTreeTag extends SimpleTagSupport {
private List<TreeModel<KLPointModel>> items; public void setItems(List<TreeModel<KLPointModel>> items) {
this.items = items;
}
 
@Override
public void doTag() throws JspException, IOException {
JspContext jspContext = getJspContext();
JspWriter writer = jspContext.getOut(); writer.print(generateHTML(items));
} private String generateHTML(List<TreeModel<KLPointModel>> items) { StringBuilder sb = new StringBuilder();
sb.append("<ul>"); for(TreeModel<KLPointModel> treeModel : items) {
sb.append("<li value='");
sb.append(treeModel.getNode().getWid());
sb.append("' >");
sb.append(treeModel.getNode().getName()); if (treeModel.getChildren() != null && treeModel.getChildren().size() > 0) {
sb.append(generateHTML(treeModel.getChildren()));
} sb.append("</li>");
} sb.append("</ul>"); return sb.toString();
} }

对于需要在标签中使用的属性,此处给定这个属性getter和setter方法即可,程序在执行时,这些属性会被自动注入:

private List<TreeModel<KLPointModel>> items;
 
public void setItems(List<TreeModel<KLPointModel>> items) {
this.items = items;
}

2.配置标签
此处配置标签的名称、属性以及对应的标签处理器等

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>
showTreeTag
</description>
<tlib-version>1.0</tlib-version>
<short-name>ShowTreeTag</short-name>
<tag>
<name>showTreeTag</name>
<tag-class>com.oolong.utils.customtags.ShowTreeTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

配置标签对应的解析类:

<tag-class>com.oolong.utils.customtags.ShowTreeTag</tag-class>

配置标签属性可以介绍解析对象:

<rtexprvalue>true</rtexprvalue>

3.使用标签
这个标签的作用是迭代的显示一个树形结构

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib uri="/WEB-INF/ShowTreeTag.tld" prefix="Oolong"%>
<div class="col-sm-5 col-md-4 sidebar" id="treepanel">
<div class="easy-tree">
<c:forEach items="${pointTree}" var="item">
<ul>
<li value="${item.domain.wid}">${item.domain.name}
<c:if test="${item.children != null && fn:length(item.children) > 0}">
<Oolong:showTreeTag items="${item.children}" />
</c:if>
</li>
</ul>
</c:forEach>
</div> </div>

在头部引入自定义标签的配置文件:

<%@ taglib uri="/WEB-INF/ShowTreeTag.tld" prefix="Oolong"%>

使用标签:

<Oolong:showTreeTag items="${item.children}" />

如果标签的属性值想要像这里这样接受对象作为参数,那就需要在配置标签时设置可以解析对象

JSP——JSTL定制标签 - 递归标签显示属性结构的更多相关文章

  1. JSTL定制标签 - 递归标签显示属性结构

  2. JSP标准标签库(JSTL)之核心标签(下)

      前面记录了核心标签的前几种,现在来接着记录. 七.<c:import>标签 使用<c:import>标签可以包含一个FTP服务器中不同的网页内容.语法格式: <c:i ...

  3. JSP标准标签库(JSTL)之核心标签(上)

    在myeclipse中新建web项目时,会自动为我们安装JSTL库,如下图: 核心标签是我们最常用的JSTL标签.在JSP页面中引用核心标签库的语法如下: <%@ taglib uri=&quo ...

  4. EL表达式与JSTL标签map遍历varStatus属性下标使用

    在JSP页面开发中,JSTL标签库迭代标签<c:forEach>为我们迭代遍历数组集合提供了一种选择. 遍历过程中varStatus属性为我们遍历集合提升了很大操作空间. 贴一下具体使用 ...

  5. jsp jstl标签库核心标签

    JSTL标签库介绍 JSTL标签库的使用时为了弥补html标签的不足,规范自定义标签的使用而诞生的.使用标签的目的就是不希望在jsp页面中出现java逻辑代码 全称:JSTL标签库分类 核心标签库使用 ...

  6. jsp: jstl标签库

    jstl标签库,通过maven配置: <!-- jstl标签的支持 --> <dependency> <groupId>javax.servlet</grou ...

  7. 【JSP jstl c标签】使用c:foreach 报错(警告)”test does not support runtime expressions“

    后台封装的数据是个list,传递给前台,显示如下: <c:forEach items="${userInfo}" var="user"> 用户Nam ...

  8. jsp jstl标签库 el表达式

    一.JSTL标签是什么? 提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言. 同时还提供了格式化数据和日期的方法.实现这些功能需要I18N格式标签库(I18N-c ...

  9. JSP页面JSTL提供的函数标签EL表达式操作字符串的方法

    首先在jsp页面导入标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&quo ...

随机推荐

  1. MySQL两种内核对比

    MySQL内核 https://blog.csdn.net/baichoufei90/article/details/83504446 关键字:全文索引 索引外置 两种内核:MyISAM 和InnoD ...

  2. java实现spark常用算子之filter

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  3. dubbo学习笔记二(服务调用)

    项目结构 代码示例 由于之前的IEchoService 的一个方法只是在服务端控制台打印,不便在浏览器测试,所以新添加的方法 api和服务端代码变更 public interface IEchoSer ...

  4. ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)

    摘要 近日thinkphp团队发布了版本更新https://blog.thinkphp.cn/869075 ,其中修复了一处getshell漏洞. 影响范围 5.x < 5.1.31<= ...

  5. docker使用国内镜像加速

    在daemon.json文件里以下国内镜像 { "registry-mirrors": [ "https://registry.docker-cn.com", ...

  6. 模块之-os模块

    模块之-os模块 >>> import os >>> os.getcwd() #获取当前工作目录 'C:\\Users\\Administrator' >&g ...

  7. VirtualBox给CentOS虚拟机挂载磁盘扩大空间

    VirtualBox给CentOS虚拟机挂载磁盘扩大空间 楼主,发现虚拟机使用存储空间不够用的情况,需要改虚拟机挂载磁盘,扩容,在网上找了一波资料,于是整合记录操详细作如下: 概要步骤如下: 1.设置 ...

  8. PAT Basic 1009 说反话 (20 分)

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  9. 【hdu 6089】Rikka with Terrorist

    题意 有一个 \(n\times m\) 的二维网格,其中有 \(k\) 个禁止点. 有 \(q\) 组询问,每组询问为给一个点,求有多少个矩形以这个点为一角且不包含禁止点. \(n,m,k,q\le ...

  10. gcc -DDEBUG

    编译方法: gcc -D(DEBUGNAME) -o execution_name execution_source_code.c 例如: gcc -DDEBUG -o quick_sort quic ...