在JSP中用自定义标签实现集合的遍历—山寨版cforeach

合集下载

JSTL详解(常用标签以及c:forEach遍历集合)

JSTL详解(常用标签以及c:forEach遍历集合)

JSTL详解(常⽤标签以及c:forEach遍历集合)JSTL标签参考⽂章:/qq_25827845/article/details/53311722# 学习总结⼀、 JSTL的简介1. 什么是JSTLJSTL 是 JSP 标准标签库,利⽤标签库的标签可以取代 JSP 页⾯上的 Java 代码,为页⾯设计⼈员和后台开发⼈员的分⼯协作提供了便利。

2. JSTL常⽤标签库标签库名URI字符串作⽤前缀核⼼标签库<%@ taglib prefix=“c” uri=“/jsp/jstl/core” %>⽤于页⾯逻辑控制如:if、forEachc格式化标签库<%@ taglib prefix=“fmt” uri=“/jsp/jstl/fmt” %>⽤于执⾏格式操作如:格式化⽇期字符串fmt3. JSTL使⽤步骤1)、导⼊ jstl-1.2.jar 包,每个标签底层其实都是⽤ Java 代码实现的,复制 jar 包到 web/WEB-INF/lib ⽬录结构下;2)、创建 JSP 页⾯,使⽤ taglib 的指令引⽤标签库<%@ taglib prefix="c" uri="/jsp/jstl/core" %>3)、接下来就可以使⽤标签库定义好的标签了,例如:<c:if>⼆、核⼼标签库常⽤标签1. c: set 标签标签名使⽤<c:out value=“xxx”/>输出 xxx<c:out value="${age}"/>输出EL表达式 ${age} 获取的内容<c:out value=”${age}” default=”xxx”/>输出EL表达式 ${age} 获取的内容,当EL表达式内容不存在时输出 default 的内容2. c: out 标签标签名使⽤<c:set var=“a” value=“xxx”/>在pageContext中添加name为a,value为xxx的数据<c:set var=”a” value=”xxx” scope=”session”/>在session中添加name为a,value为xxx的数据3. c: if 标签属性名是否⽀持EL属性类型属性描述test⽀持,必须是EL boolean EL 中条件为真则执⾏标签体内容注意:没有对应 else 标签代码案例:<c:set var="a" value="hello"/><c:if test="${not empty a }"><c:out value="${a }"/></c:if>4. c: choose 标签作⽤:⽤于多分⽀判断(多条件判断)标签名作⽤chaoose类似于 Java 中的 switch,choose只是⼀个容器,包含下⾯两个元素when可以出现多个⽤于每个判断条件,类似于 switch 中 case。

javascript中foreach语句的用法

javascript中foreach语句的用法

javascript中foreach语句的用法JavaScript是一种广泛应用于网页开发的编程语言。

它具有强大的循环结构,其中包括了`forEach`语句。

`forEach`是一个Array对象的方法,用于遍历数组的每个元素,并对每个元素执行指定的回调函数。

`forEach`的语法如下:javascriptarray.forEach(function(currentValue, index, array) {执行回调函数的操作});这里有三个参数:- currentValue:当前要处理的数组元素的值。

- index(可选):当前元素在数组中的索引。

- array (可选):被遍历的数组。

`forEach`方法会遍历整个数组,对每个元素都执行一次回调函数。

回调函数是我们自己定义的,在其中可以对每个数组元素执行一些操作。

接下来,让我们深入了解`forEach`的用法及其实际应用。

步骤1:基本用法首先,我们来看一个基本的`forEach`例子,以便更好地理解它的工作原理。

假设我们有一个保存数字的数组,我们想要将这个数组中的每个元素打印出来。

javascriptvar numbers = [1, 2, 3, 4, 5];numbers.forEach(function(number) {console.log(number);});这段代码的输出将是:12345可以看到,`forEach`方法遍历了整个数组,并对每个元素使用回调函数打印出来。

步骤2:使用索引和原数组在上面的示例中,我们只使用了数组中的元素值。

然而,在某些场景下,我们可能还需要使用到每个元素在数组中的索引,或者需要操作原始的数组。

这时,可以通过提供额外的参数来传递这些信息。

javascriptvar fruits = ["apple", "banana", "orange"];fruits.forEach(function(fruit, index, array) {console.log("Fruit:", fruit);console.log("Index:", index);console.log("Array:", array);});这段代码将会输出:Fruit: appleIndex: 0Array: ["apple", "banana", "orange"]Fruit: bananaIndex: 1Array: ["apple", "banana", "orange"]Fruit: orangeIndex: 2Array: ["apple", "banana", "orange"]通过这个例子,我们可以看到,对于每个元素,我们都能够访问到它的值(`fruit`)、索引(`index`)和原数组(`array`)。

javascriptforEach通用循环遍历方法

javascriptforEach通用循环遍历方法

javascriptforEach通⽤循环遍历⽅法上⼀次的错误太多,排版也出现了问题,重写了⼀遍,希望⼤家⽀持.循环遍历⼀个元素是开发中最常见的需求之⼀,那么让我们来看⼀个由框架BASE2和Jquery的结合版本吧.var forEach = (function(){//数组与伪数组的遍历var _Array_forEach = function (array, block, context) {if (array == null) return;//对String进⾏特殊处理if(typeof array == 'string'){array = array.split('');}var i = 0,length = array.length;for (;i < length && block.call(context, array[i], (i+1), array)!==false; i++) {}};//对象的遍历var _Function_forEach = function (object, block, context) {for (var key in object) {//只遍历本地属性if (object.hasOwnProperty(key)&&block.call(context, object[key], key, object)===false){break;}}};return function(object, block, context){if (object == null) return;if (typeof object.length == "number") {_Array_forEach(object, block, context);}else{_Function_forEach(object, block, context);}};})()函数本⾝并不复杂,但很精巧。

JSP自定义标签及函数的使用

JSP自定义标签及函数的使用

JSP⾃定义标签及函数的使⽤JSP⾃定义标签及函数⾃定义标签tags⽂件⽅式在WEB-INF/tags⽬录下创建⼀个myTag.tag⽂件<%@ tag language="java" pageEncoding="UTF-8"%><%@ attribute name="message" type="ng.String" required="true" description="消息"%><h2>Hello ${message}!</h2>在JSP⽂件中使⽤myTag标签<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%><html><body><tags:myTag message="this is my tag"></tags:myTag></body></html>输出结果为:Hello this is myTag!⾃定义标签TLD⽂件⽅式创建处理标签的类,重写doTag⽅法package com.yeyun.web.taglib.tags;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.SimpleTagSupport;public class MyTagSupport extends SimpleTagSupport{private String message;public void doTag() throws JspException, IOException {JspWriter writer = getJspContext().getOut();writer.println("Hello " + message + "!");}public void setMessage(String message) {this.message = message;}}在WEB-INF/tlds⽬录下创建⼀个myTld.tld⽂件(taglib description,标签库描述符)<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>JSTL 1.1 tag library</description><display-name>⾃定义标签</display-name><tlib-version>1.1</tlib-version><short-name>t</short-name><uri>/WEB-INF/tlds/myTld.tld</uri><tag><description>my⾃定义标签</description><name>myTag</name><tag-class>com.yeyun.web.taglib.tags.MyTagSupport</tag-class><body-content>empty</body-content><attribute><name>message</name><required>true</required><type>ng.String</type><description>消息</description></attribute></tag></taglib>JSP⽂件中使⽤myTag标签(uri与TLD⽂件中的uri⼀致)<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="t" uri="/WEB-INF/tlds/myTld.tld"%><html><body><t:myTag message="this is my tld"/></body></html>输出结果为:Hello this is my tld!⾃定义标签函数创建⼀个静态⽅法package com.yeyun.web.taglib.fns;public class MyFunction {public static String getMessage(String message) {return "Hello " + message + "!";}}在WEB-INF/tlds⽬录下创建⼀个myFn.tld⽂件<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>JSTL 1.1 functions library</description><display-name>JSTL functions</display-name><tlib-version>1.1</tlib-version><short-name>fns</short-name><uri>/WEB-INF/tlds/myFn.tld</uri><function><description>获取信息</description><name>getMessage</name><function-class>com.yeyun.web.taglib.fns.MyFunction</function-class><function-signature>ng.String getMessage(ng.String)</function-signature><example>${fns:getMessage(message)}</example></function></taglib>JSP⽂件中使⽤⾃定义函数<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="fns" uri="/WEB-INF/tlds/myFn.tld"%><html><body>${fns:getMessage("this is my function!")}</body></html>输出结果为:Hello this is my function!总结在使⽤任何标签库之前,必须在每个JSP⽂件的头部先引⼊标签库,然后在使⽤*.tld⽂件的格式参考jstl.jar下META-INF⽬录下的fn.tld及c.tldtag⽂件⽅式类似于freemarker的宏,可以创建⾃定义页⾯模板⽚段,供其他页⾯复⽤。

jsp中c标签的使用

jsp中c标签的使用

核心标签库它是JSTL中的核心库,为日常任务提供通用支持,如显示和设置变量、重复使用一组项目、测试条件和其他操作(如导入和重定向Web内容)。

Core标签按功能可分为4种类型:1 变量维护:(1)<c:set>:设置变量值和对象属性。

语法如下:<c:set value="值" var="变量名" scope="变量的作用域" target="对象名" property=" 对象属性名"></c:set>每种设置都有两种方式,总结起来,<c:set>的4种形式,如下所示:a. 使用标记属性设置JSP变量<c:set value="值" var="变量名" scope="作用域"/>b. 使用标记体设置JSP变量<c:set var="变量名" scope="作用域">标记内容</c:set>c. 使用标记属性设置对象属性<c:set value="变量名" target="对象名" property="对象属性名"/>d. 使用标记体设置对象属性<c:set target="对象名" property="作用域">标记内容</set>(2)<c:remove>:在指定作用域范围内删除变量。

语法如下:<c:remove var="变量名" scope="作用域"/>2 流程控制:分为条件标签和迭代标签。

条件标签:<c:if> <c:choose> <c:when> <c:otherwise>(1)<c:if>:与Java语言中的if语句的使用方法一样,但不能实现else的功能。

jstl中foreach用法

jstl中foreach用法

jstl中foreach用法一、JSTL中forEach的基本用法1. 在JSP页面中使用JSTL的forEach标签就像拥有了一个魔法棒,它能轻松地遍历集合。

比如说,你有一个存放着学生名字的List,就像一个装满宝贝的盒子。

`<c:forEach var="studentName"items="${studentNameList}">`,这里的`var`就像是给每个从盒子里拿出来的宝贝取个临时名字,`items`就是那个装满宝贝(学生名字)的盒子(集合)。

2. 假设你是一个图书管理员,有一个书架(数组)放着各种各样的书。

在JSTL中,你可以这样用forEach遍历这个书架。

`<c:forEachvar="book" begin="0" end="${bookArray.length - 1}">`,这里的`begin`和`end`就像是你从书架的第几本开始看,到第几本结束看,是不是很方便呢?3. 如果你的集合是一个Map,那forEach标签也能搞定。

这就好比你有一个装满各种水果和它们数量的篮子(Map),`<c:forEachvar="entry" items="${fruitMap}">`,这里的`entry`就是这个篮子里的每一组水果和数量的组合。

4. 想象一下,你有一个装满彩色珠子(字符串元素)的罐子(List)。

在JSP中,你可以用`<c:forEach var="bead"items="${beadList}">${bead}</c:forEach>`轻松地把每个珠子(字符串)拿出来展示,就像把罐子里的珠子一个一个摆在桌子上。

5. 好比你有一组朋友的年龄存放在一个数组里,就像一串数字挂在绳子上。

jsp自定义标签iterator遍历list

jsp自定义标签iterator遍历list

本文来自:iteartor标签演示List<String>的遍历,对于复杂的对象,则需要更为复杂的处理。

1、iteartor标签执行结果如下2、标签类IteratorTag.javapackage com.javaclubcn.tag;import java.util.Iterator;import java.util.List;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport;public class IteratorTag extends TagSupport {private String name;private String value;private Iterator it;public String getName() {return name;}public void setName(String name) { = name;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}@Overridepublic int doAfterBody() throws JspException {// TODO Auto-generated method stubif(it.hasNext()){//取出String,并放置到request中,用于out标签的输出String outstr = (String)it.next();pageContext.getRequest().setAttribute(name, outstr);return TagSupport.EVAL_BODY_AGAIN;}else{return TagSupport.EVAL_PAGE;}}@Overridepublic int doStartTag() throws JspException {// TODO Auto-generated method stub//取出listList list = (List)pageContext.findAttribute(value);it = list.iterator();//先要取出一次if(it.hasNext()){//取出String,并放置到request中,用于out标签的输出String outstr = (String)it.next();pageContext.getRequest().setAttribute(name, outstr);}return TagSupport.EVAL_BODY_INCLUDE;}}3、标签配置tld文件javaclubcn-tag.tld,放到WEB-INF文件夹下。

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

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

jstl标签forEach的⽤法--遍历java的集合再讲<c:forEach>之前,现讲⼀下让EL表达式⽣效的语句<% @ page isELIgnored="false"%>这句语句在你想让EL表达式⽣效的情况下,必须要加载jsp中。

<c:forEach>中各个常⽤属性的解释如下:items:要遍历的集合,通常⽤EL表达式表⽰:pageContext.setAttribute("mylist",list); ${mylist}var:变量varStatus:变量的状态 varStatus的属性有index,和count.其中index从0开始数起,count:个数。

下⾯的代码讲了java中常⽤的集合:1 <%@ page import="java.util.ArrayList" %>2 <%@ page import="com.supwisdom.domain.Student" %>3 <%@ page import="java.util.HashMap" %>4 <%@ page language="java" contentType="text/html; charset=UTF-8"5 pageEncoding="UTF-8"%>6 <%--el表达式⽣效的语句--%>7 <%@page isELIgnored="false" %>8 <%@ taglib uri="/jsp/jstl/core" prefix="c" %>9 <%--防⽌调⽤函数时报错--%>10 <%@ taglib prefix="fn" uri="/jsp/jstl/functions"%>11 <html>12 <body>13 <h2>Hello World!</h2>14 <%--forEach的⽤法--%>15 <%--⽤forEach遍历list集合--%>16 <%17 ArrayList<String> strings = new ArrayList<String>();18 strings.add("王昭君");19 strings.add("西施");20 strings.add("霍去病");21 strings.add("杨开慧");22 pageContext.setAttribute("ouyangfeng",strings);23 %>24 <c:forEach var="item" items="${ouyangfeng}" varStatus="status">25 <c:out value="${item}"></c:out>26 status.index: <c:out value="${status.index}"></c:out>27 status.count:<c:out value="${status.count}"></c:out><br>28 </c:forEach>29 <%--遍历list对象的集合--%>30 <%31 Student student = new Student();32 student.setId(1);33 student.setName("zyh");34 student.setAge(16);35 Student student2 = new Student();36 student2.setId(2);37 student2.setName("ouyangfeng");38 student2.setAge(29);39 ArrayList<Student> students = new ArrayList<Student>();40 students.add(student);41 students.add(student2);42 pageContext.setAttribute("plump",students);43 %>4445 <c:forEach var="item" items="${plump}">46学⽣的姓名: <c:out value="${}"></c:out>47学⽣的年龄: <c:out value="${item.age}"></c:out>48学⽣的⾝份证号:<c:out value="${item.id}"></c:out>49 <br>50 </c:forEach>51 <%--遍历list数组集合--%>52 <%53 ArrayList<String[]> sixi = new ArrayList<String[]>();54 String[] str= new String[]{"country","china"};55 String[] str2=new String[]{"address","NewYork"};56 String[] str3= new String[]{"student","pupil"};57 sixi.add(str);58 sixi.add(str2);59 sixi.add(str3);60 pageContext.setAttribute("array",sixi);61 %>62 <c:forEach var="item" items="${array}">63 <c:out value="${item[0]}"></c:out> <%--数组中的第⼀个元素--%>64 <c:out value="${item[1]}"></c:out> <%--数组中的第⼆个元素--%>65 <br>66 </c:forEach>67 <%--遍历map集合--%>68 <%69 HashMap<String, String> map = new HashMap<String, String>();70 map.put("China","Reservation");71 map.put("France","Romantic");72 map.put("America","Innovation");73 pageContext.setAttribute("hashmap",map);74 %>75 <c:forEach var="item" items="${hashmap}">76键是:<c:out value="${item.key}"></c:out>77值是:<c:out value="${item.value}"></c:out><br>78 </c:forEach>79 </body>80 </html>tomcat运⾏的结果为:1 Hello World!23王昭君 status.index: 0 status.count:14西施 status.index: 1 status.count:25霍去病 status.index: 2 status.count:36杨开慧 status.index: 3 status.count:47学⽣的姓名: zyh 学⽣的年龄: 16 学⽣的⾝份证号:18学⽣的姓名: ouyangfeng 学⽣的年龄: 29 学⽣的⾝份证号:29 country china10 address NewYork11 student pupil12键是:France 值是:Romantic13键是:America 值是:Innovation14键是:China 值是:Reservation。

jstl中的foreach语法

jstl中的foreach语法

JSTL中的foreach语法什么是JSTL?JSTL(JavaServer Pages Standard Tag Library)是一组在JavaServer Pages (JSP) 页面中使用的标准标签。

它提供了一种简化JSP页面开发的方式,通过提供一些常用功能的标签,可以减少在页面中编写大量的Java代码。

JSTL包含多个不同的标签库,其中之一就是Core标签库。

Core标签库提供了一些基本的控制流程、数据处理和格式化等功能,其中就包括foreach标签。

foreach标签的作用在JSP页面中,我们经常需要遍历一个集合或数组,并对其中的每个元素进行处理。

foreach标签就是为了解决这个问题而存在的。

foreach标签可以遍历一个集合或数组,并在每次迭代时取出其中的元素。

通过指定集合或数组以及相应的变量名,在每次迭代时都可以通过该变量名获取当前元素,在循环体内进行处理。

foreach语法下面是foreach标签的语法:<c:forEach var="item" items="${collection}"><!-- 迭代体 --></c:forEach>•var:指定一个变量名,用于获取当前迭代元素。

•items:指定要遍历的集合或数组表达式。

示例假设我们有一个保存学生信息的List集合,并且我们希望在JSP页面中展示每个学生的姓名和年龄。

首先,在Java代码中创建一个List集合,并将学生信息添加到该集合中:List<Student> students = new ArrayList<>();students.add(new Student("张三", 18));students.add(new Student("李四", 20));students.add(new Student("王五", 22));其中,Student类包含了学生的姓名和年龄属性。

JSTL的foreach循环遍历

JSTL的foreach循环遍历

JSTL的foreach循环遍历
forEach循环
java中的 for(String str : list)
================================
<ul>
<c:forEach var="str" items="${list}" varStatus="vs">
<%-- 循环体--%>
<c:if test="${vs.first}">
<li style="font-weight: bold">${str}--${vs.index}--${vs.count}--${vs.first}</li>
</c:if>
<c:if test="${not vs.first}">
<li>${str}--${vs.index}--${vs.count}--${vs.first}--${st}</li>
</c:if>
每⼀个 元素值:${str}
下标(从0开始):${vs.index}
序号:${vs.count}
第⼀个:${vs.first}
最后⼀个:${st}
</c:forEach>
</ul>
var:代表的是集合或者数组中的每⼀个变量,这个名称⾃定义即可;迭代变量名
items:代表要遍历的集合或者数组,需要使⽤EL表达式
varStatus:代表当前正在遍历的对象的状态,属性值⾃定义即可。

foreach遍历每个单元格的两种方法

foreach遍历每个单元格的两种方法

foreach遍历每个单元格的两种方法# foreach 遍历每个单元格的两种方法嘿,朋友们!今天我来给大家分享一下在编程中,用 foreach 遍历每个单元格的两种超实用的方法。

这可是我在代码世界里摸爬滚打总结出来的秘籍,大家可得听好了!咱们先来聊聊第一种方法,就像去果园摘果子,一个一个都不放过。

想象一下,我们有一张布满数据的表格,就像一个装满水果的大箩筐。

每个单元格就是一个水果。

我们要做的就是把每个水果都检查一遍。

第一步,咱得先把这个“箩筐”,也就是包含单元格的数据结构准备好。

这就好比你得先有个装满水果的筐子,才能开始挑嘛。

第二步,就是启动我们的 foreach 魔法咒语啦。

这就像是告诉一个勤劳的小蜜蜂:“去吧,把每个果子都照顾到!”在代码里,就是用类似 `foreach (var cell in dataCells)` 这样的语句,这里的 `dataCells` 就是我们的“箩筐”,`cell` 就是我们每次要处理的那个“水果”,也就是单元格。

第三步,那就是在这个循环里面,对每个单元格进行操作啦。

比如说,看看这个单元格里的数据是不是我们想要的,或者对数据进行加工处理。

这就好像检查每个水果是不是熟了,熟了的就放进篮子里。

给大家说个我自己的奇葩经历,有一次我忘了把“箩筐”准备好,直接就开始念咒语,结果程序就像个发脾气的小孩,啥也不干,给我来了个错误提示。

从那以后,我可长记性了,准备工作一定要做好!接下来,咱们说说第二种方法。

这个方法就像是坐火车,一站一站地停,每个站就是一个单元格。

首先,同样得有我们的“火车轨道”和“车厢”,也就是数据结构。

然后,通过巧妙的设置,让我们的 foreach 像火车一样沿着轨道跑起来。

比如说,用特定的条件或者索引来控制遍历的顺序和范围。

在循环体里面,那就是下车看看每个“站点”的风景,也就是处理单元格里的数据。

我有个朋友,之前用这第二种方法的时候,把条件设置错了,结果火车不是跑过头就是没跑到,那叫一个混乱!总结一下哈,不管是第一种像小蜜蜂采蜜的方法,还是第二种像火车跑站的方法,关键都是要把准备工作做好,清楚自己要干啥,别像我和我朋友那样犯迷糊。

在JSP中用自定义标签实现集合的遍历—山寨版cforeach

在JSP中用自定义标签实现集合的遍历—山寨版cforeach

【文章标题】在JSP中用自定义标签实现集合的遍历——山寨版<c:foreach>【文章作者】曾健生【作者邮箱】zengjiansheng1@【作者QQ】190678908******************************************************************************* 在JSTL中,标签<c:foreach></c:foreach>可方便地遍历集合或数组,在了解了自定义标签后,可动手实现<c:foreach>标签的功能。

在编写自定义标签前,总要把实验环境搭建好^-^首先,定义一个Person类,在实验的集合中就是存放这个类的实例,代码如下:package com.javaeye.newjueqi;/***实验类Person*/public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}既然是遍历集合,那么集合也是必须的,我们在测试页面TestMyELTag.jsp上写下如下的JSP代码,生成一个测试用途的集合ArrayList,集合中有三个元素<%//第1个人对象Person p1=new Person();p1.setName("Tom");p1.setAge(23);//第2个人对象Person p2=new Person();p2.setName("Mike");p2.setAge(33);//第3个人对象Person p3=new Person();p3.setName("Jack");p3.setAge(43);ArrayList list=new ArrayList();list.add( p1 );list.add( p2 );list.add( p3 );//把ArrayList存储在applicationpageContext.setAttribute( "PersonList", list );%>在编写“山寨版”<c:foreach>前,有必要先了解一下正版的<c:foreach>的标准用法是怎么样的。

Jsp页面遍历后台传过来的List

Jsp页面遍历后台传过来的List

Jsp页⾯遍历后台传过来的ListJsp页⾯遍历后台传过来的List1:使⽤jstl标签(可以和⾃定义标签配合使⽤)⾸先引⽤jstl标签1. <%@ taglib uri="/jsp/jstl/core" prefix="c" %>然后使⽤foreach标签1. <c:forEach items="${list}" var="user" varStatus="vs">2. <tr>3. <td align = "center">${user.PId}</td>4. <td align = "center">${user.PLoginname}</td>5. <td align = "center">${user.PUserName}</td>6. <td align = "center">${user.PEmail}</td>7. <td align = "center"><html:department pdeptid="${user.PDeptid}"></html:department></td> <!-- ⾃定义标签 -->8. </tr>9. </c:forEach>可以⽤<c:if test="${not empty list}"></c:if> 和 <c:if test="${not empty list}"></c:if> 来处理是否为空的情况。

jsp页面循环集合操作整理

jsp页面循环集合操作整理

jsp页⾯循环集合操作整理第⼀种:struts1.2循环遍历元素,name是结果集。

引⽤标签库<%@ taglib uri="/tags-logic"prefix="logic" %><logic:iterate>主要⽤来处理在页⾯上输出集合类,集合⼀般来说是下列之⼀:1、 java对象的数组2、 ArrayList、Vector、HashMap等例:复制代码代码如下:<logic:iterate id="a" name="list" type=" er "><tr><td width="50%">name: <bean:write name="a" property="name"/><td/><td width="50%">password: <bean:write name="a" property="password"/></td></tr></logic:iterate>iterate标记id 脚本变量的名称,它保存着集合中当前元素的句柄。

name 代表了你需要叠代的集合,来⾃session或者request的属性。

type 是其中的集合类元素的类型bean 的write标记是⽤来将属性输出的,name⽤来匹配iterate的id,property⽤来匹配相应类的属性<logic:iterate>⽤法详解22007-04-04 20:34<login:iterate>标记⽤于在页⾯中创建⼀个循环,以此来遍历如数组、Collection、Map这样的对象。

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

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

JSTL的forEach标签中的属性具体含义
JSTL的forEach标签在JSP页⾯经常替代Java脚本的循环语句,⽣成多个记录的信息。

⼀般只需
⼀个⼀个的展⽰记录即可,有些需要获取当前记录的索引。

在需要获取当前记录的索引的时候可能
有点⿇烦,但forEach标签依然可以简单的实现需求。

forEach标签中的属性的详细讲解:
items:将要进⾏迭代的集合。

var:当前迭代的集合中的元素。

begin:第⼀个要迭代的元素的下标
end:最后⼀个要迭代的元素的下标
step:每次迭代下标的增量,默认为1。

即若当前迭代集合中下标为2的元素,⼀下次迭代下标为2 + step的元素
varStatus:状态项。

该属性⽐其他的复杂,因为它的属性值中包含多个属性。

index属性:当前迭代的元素在集合中的索引,从0开始
count属性:当前迭代的元素是集合中第⼏个元素,从1开始。

如果当前迭代的元素索引为3,那么它是集合中第4个元素,即count的值为4
first属性:当前迭代的元素是否为集合中的第⼀个元素
last属性:当前迭代的元素是否为集合中的最后⼀个元素
current属性:当前迭代的元素,该属性的值和var属性的值代表集合中的同⼀个元素
<c:forEach items="${collection}" var="ele" varStatus="status"></c:forEach>。

ele表⽰当前迭代的元素,只要使⽤status.index即可取到当前元素的索引。

cforeach用法

cforeach用法

cforeach用法```pythonfor element in container:#循环体代码```其中,`element`是每次循环中的元素,`container`是要遍历的容器。

在每次循环中,`element`会取到`container`中的一个元素,然后执行循环体的代码。

循环会一直进行,直到遍历完`container`中的所有元素。

下面我们将详细讲解cforeach的用法,包括针对不同类型容器的遍历方式和相关操作。

1. 遍历列表(list):列表是Python中最常用的容器类型之一,可以存储多个元素,并且列表中的元素是有序的。

使用cforeach遍历列表非常简单,只需要将列表赋值给`container`即可。

示例如下:```pythonfruits = ["apple", "banana", "orange"]for fruit in fruits:print(fruit)```输出结果:applebananaorange```2. 遍历元组(tuple):元组与列表类似,也可以存储多个元素,但元组中的元素不可修改。

遍历元组的方式与遍历列表相同,只需要将元组赋值给`container`即可。

示例如下:```pythoncolors = ("red", "green", "blue")for color in colors:print(color)```输出结果:```redgreenblue3. 遍历字典(dictionary):字典是Python中一种键值对的数据结构,可以存储多个键值对,用于表示映射关系。

遍历字典时,可以通过cforeach获取字典的键、值或键值对。

示例如下:```pythonstudent_scores = {"Alice": 90, "Bob": 85, "Charlie": 92}#遍历键for student_name in student_scores:print(student_name)#遍历值for score in student_scores.values(:print(score)#遍历键值对for student_name, score in student_scores.items(:print(student_name, score)```输出结果:```BobCharlie908592Alice 90Bob 85Charlie 92```4. 遍历集合(set):集合是Python中用于存储唯一元素的容器类型,与列表和元组不同,集合中的元素是无序的且不重复。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【文章标题】在JSP中用自定义标签实现集合的遍历——山寨版<c:foreach>
【文章作者】曾健生
【作者邮箱】zengjiansheng1@
【作者QQ】190678908
******************************************************************************* 在JSTL中,标签<c:foreach></c:foreach>可方便地遍历集合或数组,在了解了自定义标签后,可动手实现<c:foreach>标签的功能。

在编写自定义标签前,总要把实验环境搭建好^-^
首先,定义一个Person类,在实验的集合中就是存放这个类的实例,代码如下:package com.javaeye.newjueqi;
/**
*实验类Person
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
既然是遍历集合,那么集合也是必须的,我们在测试页面TestMyELTag.jsp上写下如下的JSP代码,生成一个测试用途的集合ArrayList,集合中有三个元素
<%
//第1个人对象
Person p1=new Person();
p1.setName("Tom");
p1.setAge(23);
//第2个人对象
Person p2=new Person();
p2.setName("Mike");
p2.setAge(33);
//第3个人对象
Person p3=new Person();
p3.setName("Jack");
p3.setAge(43);
ArrayList list=new ArrayList();
list.add( p1 );
list.add( p2 );
list.add( p3 );
//把ArrayList存储在application
pageContext.setAttribute( "PersonList", list );
%>
在编写“山寨版”<c:foreach>前,有必要先了解一下正版的<c:foreach>的标准用法是怎么样的。

如果用<c:foreach>遍历上述的集合写法如下:
<c:forEach items="${pageScope.personlist}" var="per">
${ } -- ${per.age } <br>
</c:forEach>
<c:foreach>是循环控制,可以将集合中的成员循序遍历一遍,运行方式为条件符合时,将会重复执行<c:foreach>的本体内容。

<c:foreach>中的属性的含义:items是被迭代的集合对象,var是用来存放现在指向的成员,上面的代码运行后的结果如图1所示:
图1
我们实现一个自定义的标签<newjueqi: myforEach>,模拟实现<c:forEach>的功能,用法如下:
<!-- 使用自定义标签模拟实现<c:forEach>中集合的遍历功能 -->
<newjueqi:myforEach items="${pageScope.personlist}" var="per"> ${ } -- ${per.age } <br>
</newjueqi:myforEach>
效果如图1 所示
下面是正式的代码:
1.编写一个自定义的标签类。

/**
*完成模拟<c:forEach>标签遍历集合的功能
*/
public void doTag() throws JspException, IOException {
// 定义一个迭代器
Iterator i=null;
//如果集合是Colleciton类型
if( items instanceof Collection )
{
//获取Collection的迭代器
i=( (Collection)items).iterator();
}
//如果集合是数组类型
else if( items instanceof Object[] )
{
//用Arrays的静态方法asList把数组转换为一个List集合,由于asList接受的参数
//是可变参数,所以为了防止转换出错必须要把传入的参数强制为数组
i=Arrays.asList((Object[])items).iterator();
}
else
{
throw new RuntimeException("不能转换");
}
//进行迭代
while( i.hasNext() )
{
//取得集合中迭代器指向的对象
Object obj=i.next();
//用setAttribute方法把对象和指定的变量连接起来
//例如标签中有属性var="per",标签体中有EL表达式式:$()
//写了下面的一句话后EL表达式就可理解为obj.getName(),表示调用的是
//对象相应的getXXX()
pageContext.setAttribute( var, obj );
//执行标签体的内容
jspFragment.invoke( null );
}
}
2.根据自定义标签的写法,首先写一个tld文件配置自定义标签。


于标签<newjueqi: myforEach>是带有属性和标签体的,所以编写如下:
<!-- 配置一个自定义标签 -->
<tag>
<!-- 指定自定义标签的名字 -->
<name>myforEach</name>
<!-- 指定当前标签关联的 Java 类 -->
<tag-class>com.javaeye.newjueqi.MyForEach</tag-class>
<!-- 指定标签体的类型: -->
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3.在JSP页面中导入标签。

<%@ taglib prefix="newjueqi" uri="/myforEach" %>
4.在JSP页面中使用自定义标签测试实际的效果。

<!-- 使用自定义标签模拟实现<c:forEach>中集合的遍历功能 -->
<newjueqi:myforEach items="${pageScope.personlist}" var="per"> ${ } -- ${per.age } <br>
</newjueqi:myforEach>
运行的实际效果如图1所示
结语:这个自定义标签遍历集合的功能还不完善,譬如不能遍历Map集合中的元素,但它们的编写思路是一致的,Map集合中需要进一步封装对象。

相关文档
最新文档