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

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. 帝国cms 【反馈案例】 代码

    <form name='feedback' method='post' enctype='multipart/form-data' action='/e/enews/index.php' ons ...

  2. java实现RPC

    一,服务提供者 工程为battercake-provider,项目结构图如下图所示 1.1 先创建一个“卖煎饼”微服务的接口和实现类 package com.jp.service; public in ...

  3. 模块之-os模块

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

  4. xhost + command not found

    如下是一个示例: 原本我以为在没有联网的情况下.不能使用yum 的.可能是本地配置了yum 了吧也可以使用 1. [oracle@11GR2-test ~]$ export DISPLAY=192.1 ...

  5. SEO黑页以及门页框架和JS跳转实现方法

    在去年大家还在针对第三方博客狂轰乱炸,比如:webs.com.blogspot.com.weebly.com主要是因为本身博客平台的权重,再就是低廉的成本,主需要注册,没有域名和服务器的投入.排名也非 ...

  6. qa角色记一次测试过程回溯

    一.测试过程简述 a项目依赖b项目新功能,ab项目一起提测 1.测试人员:两老一新 2.测试过程:第一轮,三人执行用例 第二轮,三人各自模块发散 第三轮,三人交叉测试 第四轮,两老投入b项目性能以及接 ...

  7. js 动态获取高度 设置距离

    var boxs = document.getElementById('m2-head');var Height = boxs.clientHeight||o.offsetHeight;console ...

  8. vsto 将图片加入到word里面

    private void AddPictoWord() { string folderpath = @"C:\Users\k0021213\Pictures\QQ浏览器截图"; D ...

  9. 求两个数的最大公约数和最小公倍数Java(cvte考题)

    //最大公约数 最小公倍数 通过测试 public class GongYue{ public static int gongyue(int m, int n) throws Exception{ i ...

  10. Linux下获得本机IP(非127.0.0.1)

    在Linux下用InetAddress.getLocalHost()方法获取本机IP地址,得到的结果总是:127.0.1.1.原来这个是etc/hosts文件中的配置,并非网卡的IP地址. 可用代码如 ...