JSP——JSTL定制标签 - 递归标签显示属性结构
编写定制标签分为三个步骤:编写标签处理器、配置标签、使用标签。
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定制标签 - 递归标签显示属性结构的更多相关文章
- JSTL定制标签 - 递归标签显示属性结构
- JSP标准标签库(JSTL)之核心标签(下)
前面记录了核心标签的前几种,现在来接着记录. 七.<c:import>标签 使用<c:import>标签可以包含一个FTP服务器中不同的网页内容.语法格式: <c:i ...
- JSP标准标签库(JSTL)之核心标签(上)
在myeclipse中新建web项目时,会自动为我们安装JSTL库,如下图: 核心标签是我们最常用的JSTL标签.在JSP页面中引用核心标签库的语法如下: <%@ taglib uri=&quo ...
- EL表达式与JSTL标签map遍历varStatus属性下标使用
在JSP页面开发中,JSTL标签库迭代标签<c:forEach>为我们迭代遍历数组集合提供了一种选择. 遍历过程中varStatus属性为我们遍历集合提升了很大操作空间. 贴一下具体使用 ...
- jsp jstl标签库核心标签
JSTL标签库介绍 JSTL标签库的使用时为了弥补html标签的不足,规范自定义标签的使用而诞生的.使用标签的目的就是不希望在jsp页面中出现java逻辑代码 全称:JSTL标签库分类 核心标签库使用 ...
- jsp: jstl标签库
jstl标签库,通过maven配置: <!-- jstl标签的支持 --> <dependency> <groupId>javax.servlet</grou ...
- 【JSP jstl c标签】使用c:foreach 报错(警告)”test does not support runtime expressions“
后台封装的数据是个list,传递给前台,显示如下: <c:forEach items="${userInfo}" var="user"> 用户Nam ...
- jsp jstl标签库 el表达式
一.JSTL标签是什么? 提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言. 同时还提供了格式化数据和日期的方法.实现这些功能需要I18N格式标签库(I18N-c ...
- JSP页面JSTL提供的函数标签EL表达式操作字符串的方法
首先在jsp页面导入标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&quo ...
随机推荐
- O001、写在最前面
参考https://www.cnblogs.com/CloudMan6/p/5224114.html <每天5分钟玩转 OpenStack> 1.系统讲解 OpenStac ...
- xml_SAX解析
(一)SAX解析 1.1 SAX解析 SAX:基于事件处理的机制 sax解析xml文件时,遇到根开始标签,根结束标签,开始解析文件,文件解析结束,字符内容,空白字符等都会触发各自的方法. 优点: 适合 ...
- 第三篇.6、python基础补充
''' 不可变:数字,字符串,元组 可变:列表,字典 原子:数字,字符串 容器:列表,元组,字典 直接访问:数字 顺序:字符串,列表,元组 映射访问:字典 ''' #一一对应 a,b,c,d,e='h ...
- Linux课程学习 第三课
生活中的许多事,并不是我们不能做到,而是我们不相信能够做到 https://www.linuxcool.com/ 一个很实用的Linux命令查询网站,并且还有发音 如果我们在系统终端中执行一个命令后想 ...
- IO模型(epoll)--详解-01
写在前面 从事服务端开发,少不了要接触网络编程.epoll作为linux下高性能网络服务器的必备技术至关重要,nginx.redis.skynet和大部分游戏服务器都使用到这一多路复用技术. 本文会从 ...
- spring中对JDO的配置
<!-- persistenceManagerFactory --> <bean id="myPmf" class="org.springframewo ...
- centos swap分区
swap分区 通常memory是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的话,会有非常快的读写速度.但是,内存的造价是要高于磁盘 ...
- UVA - 12538 Version Controlled IDE (可持久化treap)
紫薯例题 #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f; ],ch[ ...
- 前端面试题-CSS优先级
一.选择器优先级 浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值.优先级是基于不同种类选择器组成的匹配规则. 二.优先级计算 优先级就是分配给指定的CSS声明的一个 ...
- js 代码位置不同,导致随着点击函数执行次数累加
每个人书写代码的习惯都不同吃,思想也都不一样,但在工作中为了减少工作量与时间,难免遇到要用别人写的代码.这次在使用同事的代码中,偶然发现的问题,因为js不好,所以一眼也没发现问题所在,查了查网上才知道 ...