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

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. luogu P5366 [SNOI2017]遗失的答案

    luogu 首先gcd为\(G\),lcm为\(L\),有可能出现的数(指同时是\(G\)的因数以及是\(L\)的倍数)可以发现只有几百个.如果选出的数要能取到gcd,那么对于每种质因子,都要有一个数 ...

  2. Hive编程指南读书笔记(1):

    1.Mapreduce是一种计算模型,将计算任务分割成多个可以在服务器集群中并行执行的任务,然后分散到一群家用的或者服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性. 2.mapreduce的两 ...

  3. 第二十篇 jQuery 初步学习2

    jQuery 初步学习2   前言:   老师这里啰嗦一下,因为考虑到一些同学,不太了解WEB前端这门语言.老师就简单的说一下,写前端,需要什么:一台笔记本.一个文本编辑器.就没啦!当然,写这门语言, ...

  4. 安卓端调用h5界面js方法和ios端调用h5界面js方法

      备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法:     2.安卓端调用h5界面js方法: @Override    protect ...

  5. MySQL查询一张表有多少个字段

    SQL如下 select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'

  6. 全面解析Java日期时间API

    时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...

  7. Hive Server2(五)

    HiveServer2 基本概念介绍 1.HiveServer2基本介绍 HiveServer2 (HS2) is a server interface that enables remote cli ...

  8. MVC 事物

    前一阵学习mvc但是对于关联表的数据操作总是分裂开来写,这样有很大的侥幸,比如嵌套了3个 if(){ if(){ if(){ } } } 如果前两个都是true那么最后一个是false了,这样是不想看 ...

  9. ESXi与物理交换机静态链路聚合配置过程中的小陷阱

    作者:陆斌文章来自微信公众号:平台人生 内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影响 ...

  10. hdu4352 XHXJ's LIS[数位DP套状压DP+LIS$O(nlogn)$]

    统计$[L,R]$内LIS长度为$k$的数的个数,$Q \le 10000,L,R < 2^{63}-1,k \le 10$. 首先肯定是数位DP.然后考虑怎么做这个dp.如果把$k$记录到状态 ...