jsp 页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ include file="/includes/ctx.jsp" %>
  4. <%@ taglib uri="/RemoveListItems" prefix="z"%>
  5. <!DOCTYPE html >
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>角色管理</title>
  10. </head>
  11. <body>
  12. <z:for items="${rolelist}" var="z">
  13. <p>${z.rolename}</p>
  14. </z:for>
  15. </body>
  16. </html>

WEB-INF  目录下创建tld 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taglib version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
  5. <tlibversion>1.0</tlibversion>
  6. <jspversion>1.1</jspversion>
  7. <shortname>eRedLab JSPTag Library</shortname>
  8. <uri>/RemoveListItems</uri>
  9. <info>自定义标签</info>
  10.  
  11. <tag>
  12. <name>for</name>
  13. <tagclass>com.oa.tag.Repeater</tagclass>
  14. <bodycontent>scriptless</bodycontent>
  15. <info></info>
  16. <attribute>
  17. <name>items</name>
  18. <required>true</required>
  19. <rtexprvalue>true</rtexprvalue>
  20. </attribute>
  21. <attribute>
  22. <name>var</name>
  23. <required>true</required>
  24. <rtexprvalue>true</rtexprvalue>
  25. </attribute>
  26. <attribute>
  27. <name>index</name>
  28. <required>false</required>
  29. <rtexprvalue>true</rtexprvalue>
  30. </attribute>
  31. </tag>
  32. </taglib>

java 类代码

  1. import java.util.List;
  2. import javax.servlet.jsp.JspException;
  3. import javax.servlet.jsp.tagext.TagSupport;
  4.  
  5. public class Repeater extends TagSupport {
  6.  
  7. /**
  8. *
  9. */
  10. private static final long serialVersionUID = 4086401651029717288L;
  11. private List<?> items;
  12. private String var;
  13. private String index;
  14. private int i;
  15.  
  16. @Override
  17. public int doStartTag() throws JspException {
  18.  
  19. if (items == null || items.size() == 0){
  20. return SKIP_BODY;
  21. }
  22. if(index==null)index = "";
  23.  
  24. i = 0;
  25. if(i<items.size()){
  26. pageContext.setAttribute(var, items.get(i));
  27. pageContext.setAttribute(index, i);
  28. }
  29.  
  30. return EVAL_BODY_INCLUDE;
  31. }
  32.  
  33. @Override
  34. public int doAfterBody() throws JspException {
  35. i++;
  36. if(i < items.size()){
  37. pageContext.setAttribute(var, items.get(i));
  38. pageContext.setAttribute(index, i);
  39. return EVAL_BODY_AGAIN;
  40. }
  41.  
  42. return SKIP_BODY;
  43. }
  44.  
  45. @Override
  46. public int doEndTag() throws JspException {
  47. return EVAL_PAGE;
  48. }
  49.  
  50. public void setItems(List<?> items) {
  51. this.items = items;
  52. }
  53.  
  54. public void setVar(String var) {
  55. this.var = var;
  56. }
  57.  
  58. public void setIndex(String index){
  59. this.index = index;
  60. }
  61.  
  62. }

  

实现 jstl标签foreach 功能的更多相关文章

  1. jstl标签forEach的用法--遍历java的集合

    再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...

  2. JSTL标签出错:<c:forEach var="book" items="${requestScope.books}" varStatus="status">

    今天在运行书里的JSTL标签代码的时候出错,总结一下: 问题1.The JSP specification requires that an attribute name is preceded by ...

  3. 详解JSTL的forEach标签

    详解JSTL的forEach标签 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍.      <c:forEach> 标签的语法 说明 : 语法:迭代一集合对象之所有 ...

  4. jstl的foreach标签

    jsp支持丰富的jstl标签语言(需要jar包支持),其中list循环(迭代)用的是<c:forEach></c:forEach>标签. 这个标签的作用就是迭代输出标签内部的内 ...

  5. JSTL的forEach标签中的属性具体含义

    JSTL的forEach标签在JSP页面经常替代Java脚本的循环语句,生成多个记录的信息.一般只需 一个一个的展示记录即可,有些需要获取当前记录的索引.在需要获取当前记录的索引的时候可能 有点麻烦, ...

  6. JSTL标签 参考手册

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  7. JSTL标签库

    JSP页面作为内嵌java的Html简化了Servlet在控制页面显示的语法,但JSP脚本中的表达式功能不够强大,语法也稍显繁杂,EL(Expression Language)表达式语言的出现能够大大 ...

  8. JSTL标签库之核心标签

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

  9. jstl 标签库的使用

    JSTL 核心标签库 使用   JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.ot ...

随机推荐

  1. Oracle学习(二):过滤和排序

    1.知识点:能够对比以下的录屏进行阅读 SQL> --字符串大写和小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ...

  2. [yueqian_scut]Android多点触控技术和应用框架

    Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...

  3. 编译Redis系统提示缺少gcc,可以使用yum进行安装:

    yum -y install gcc yum -y install gcc-c++ yum install make -- 或者 yum groupinstall "Development ...

  4. hdoj--1754--I Hate It(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. 8.QList QMap QVariant

    QList int main1(int argc, char *argv[]) { QApplication a(argc, argv); QList<,,}; mylist << ...

  6. (转)Django学习之 第四章:Django模板系统

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1.显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...

  7. vue强制绑定css3的缩放效果transfrom:scale()

    vue不提供 transfrom:scale(1.5) : 会报错 ,错误是  "TypeError: _vm.scale is not a function": 原因:Vue将其 ...

  8. .net 三大核心对象

    .net 三大核心对象 HttpRequest 现在总算轮到第一个核心对象出场了.MSDN给它作了一个简短的解释:“使 ASP.NET 能够读取客户端在 Web 请求期间发送的 HTTP 值.”这个解 ...

  9. 发现个很变态的css问题,记录下。

    注意看Ul:nth-child(){} 本来是一一对应的,因为后来改版在div中加了<h1></h1>标记后,竟然自动后移了.... 不可思议,莫明奇妙

  10. WCF(四)windows服务寄宿

    WCF常用的寄宿方式除了IIS寄宿外,还有一种方式是寄宿到windows服务中,跟随系统启动而启动. 1.在项目中选择“添加”--“新建windows服务” 2.打开系统生成的设计界面的代码,引用“u ...