实现 jstl标签foreach 功能
jsp 页面
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ include file="/includes/ctx.jsp" %>
- <%@ taglib uri="/RemoveListItems" prefix="z"%>
- <!DOCTYPE html >
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>角色管理</title>
- </head>
- <body>
- <z:for items="${rolelist}" var="z">
- <p>${z.rolename}</p>
- </z:for>
- </body>
- </html>
WEB-INF 目录下创建tld 文件
- <?xml version="1.0" encoding="UTF-8"?>
- <taglib version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
- <tlibversion>1.0</tlibversion>
- <jspversion>1.1</jspversion>
- <shortname>eRedLab JSPTag Library</shortname>
- <uri>/RemoveListItems</uri>
- <info>自定义标签</info>
- <tag>
- <name>for</name>
- <tagclass>com.oa.tag.Repeater</tagclass>
- <bodycontent>scriptless</bodycontent>
- <info></info>
- <attribute>
- <name>items</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>var</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>index</name>
- <required>false</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- </taglib>
java 类代码
- import java.util.List;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.tagext.TagSupport;
- public class Repeater extends TagSupport {
- /**
- *
- */
- private static final long serialVersionUID = 4086401651029717288L;
- private List<?> items;
- private String var;
- private String index;
- private int i;
- @Override
- public int doStartTag() throws JspException {
- if (items == null || items.size() == 0){
- return SKIP_BODY;
- }
- if(index==null)index = "";
- i = 0;
- if(i<items.size()){
- pageContext.setAttribute(var, items.get(i));
- pageContext.setAttribute(index, i);
- }
- return EVAL_BODY_INCLUDE;
- }
- @Override
- public int doAfterBody() throws JspException {
- i++;
- if(i < items.size()){
- pageContext.setAttribute(var, items.get(i));
- pageContext.setAttribute(index, i);
- return EVAL_BODY_AGAIN;
- }
- return SKIP_BODY;
- }
- @Override
- public int doEndTag() throws JspException {
- return EVAL_PAGE;
- }
- public void setItems(List<?> items) {
- this.items = items;
- }
- public void setVar(String var) {
- this.var = var;
- }
- public void setIndex(String index){
- this.index = index;
- }
- }
实现 jstl标签foreach 功能的更多相关文章
- jstl标签forEach的用法--遍历java的集合
再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...
- JSTL标签出错:<c:forEach var="book" items="${requestScope.books}" varStatus="status">
今天在运行书里的JSTL标签代码的时候出错,总结一下: 问题1.The JSP specification requires that an attribute name is preceded by ...
- 详解JSTL的forEach标签
详解JSTL的forEach标签 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍. <c:forEach> 标签的语法 说明 : 语法:迭代一集合对象之所有 ...
- jstl的foreach标签
jsp支持丰富的jstl标签语言(需要jar包支持),其中list循环(迭代)用的是<c:forEach></c:forEach>标签. 这个标签的作用就是迭代输出标签内部的内 ...
- JSTL的forEach标签中的属性具体含义
JSTL的forEach标签在JSP页面经常替代Java脚本的循环语句,生成多个记录的信息.一般只需 一个一个的展示记录即可,有些需要获取当前记录的索引.在需要获取当前记录的索引的时候可能 有点麻烦, ...
- JSTL标签 参考手册
前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...
- JSTL标签库
JSP页面作为内嵌java的Html简化了Servlet在控制页面显示的语法,但JSP脚本中的表达式功能不够强大,语法也稍显繁杂,EL(Expression Language)表达式语言的出现能够大大 ...
- JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- jstl 标签库的使用
JSTL 核心标签库 使用 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.ot ...
随机推荐
- Oracle学习(二):过滤和排序
1.知识点:能够对比以下的录屏进行阅读 SQL> --字符串大写和小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ...
- [yueqian_scut]Android多点触控技术和应用框架
Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...
- 编译Redis系统提示缺少gcc,可以使用yum进行安装:
yum -y install gcc yum -y install gcc-c++ yum install make -- 或者 yum groupinstall "Development ...
- hdoj--1754--I Hate It(线段树)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 8.QList QMap QVariant
QList int main1(int argc, char *argv[]) { QApplication a(argc, argv); QList<,,}; mylist << ...
- (转)Django学习之 第四章:Django模板系统
前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1.显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...
- vue强制绑定css3的缩放效果transfrom:scale()
vue不提供 transfrom:scale(1.5) : 会报错 ,错误是 "TypeError: _vm.scale is not a function": 原因:Vue将其 ...
- .net 三大核心对象
.net 三大核心对象 HttpRequest 现在总算轮到第一个核心对象出场了.MSDN给它作了一个简短的解释:“使 ASP.NET 能够读取客户端在 Web 请求期间发送的 HTTP 值.”这个解 ...
- 发现个很变态的css问题,记录下。
注意看Ul:nth-child(){} 本来是一一对应的,因为后来改版在div中加了<h1></h1>标记后,竟然自动后移了.... 不可思议,莫明奇妙
- WCF(四)windows服务寄宿
WCF常用的寄宿方式除了IIS寄宿外,还有一种方式是寄宿到windows服务中,跟随系统启动而启动. 1.在项目中选择“添加”--“新建windows服务” 2.打开系统生成的设计界面的代码,引用“u ...