JSTL标签库深入解析:<c:forEach>与EL表达式

需积分: 9 19 下载量 131 浏览量 更新于2024-08-18 收藏 3.74MB PPT 举报
"<c:forEach>标记-EL表达式与JSTL标签库" 本文将深入探讨 `<c:forEach>` 标签以及与其紧密相关的 Expression Language (EL) 表达式,它们是JavaServer Pages (JSP) 开发中常用的两个重要工具。`<c:forEach>` 标签用于循环遍历集合,而EL表达式则提供了简洁的数据访问方式。 首先,让我们看看 `<c:forEach>` 标签的语法。它有两种主要用法:一是迭代集合对象的所有成员,二是迭代指定的次数。对于迭代集合,基本语法如下: ```xml <c:forEach var="varName" items="collection" varStatus="varStatusName" [begin="begin"] [end="end"] [step="step"]> 本体内容 </c:forEach> ``` - `varName`:定义一个局部变量,每次循环时将集合中的当前元素赋值给该变量。 - `items`:指定要迭代的集合或数组。 - `varStatus`:创建一个状态变量,可以访问当前循环的索引、总项数等信息。 - `begin` 和 `end`:可选参数,用于指定迭代的起始和结束位置。 - `step`:可选参数,定义每次迭代的步长。 对于迭代指定次数,可以省略 `items` 参数,只保留 `begin`、`end` 和 `step`: ```xml <c:forEach var="varName" varStatus="varStatusName" begin="begin" end="end" [step="step"]> 本体内容 </c:forEach> ``` EL(Expression Language)表达式是JSP 2.0引入的一种强大且简洁的数据访问语言。它允许开发者以声明式的方式获取和设置Java对象的属性,无需编写Java脚本。基本的EL表达式格式为 `${expression}`。 例如,`${sessionScope.user.sex}` 可以从Session作用域中获取用户对象的性别属性。EL表达式支持 `. ` 和 `[]` 运算符,两者都可以用来访问对象的属性,但有以下差异: - 如果属性名包含非字母数字的特殊字符,比如 `"My-Name"`,必须使用 `[]`,即 `${user["My-Name"]}`。 - 当需要动态获取属性名时,`[]` 是必要的,如 `${sessionScope.user[data]}`,其中 `data` 是一个变量,可以根据其值动态访问 `user` 对象的属性。 此外,EL表达式中 `expr-a[expr-b]` 的行为如下: - 如果 `expr-a` 为 `null`,结果也是 `null`。 - 如果 `expr-b` 为 `null`,结果也是 `null`。 - 当 `expr-a` 是 `Map` 类型时,`expr-b` 的值将作为键来获取 `Map` 中对应的值。 结合 `<c:forEach>` 和 EL,开发者可以在JSP页面中轻松处理循环和数据访问,提高代码的可读性和维护性。这使得JSP开发更加高效,同时也减少了与服务器端交互的复杂性。在实际应用中,通过 `<c:forEach>` 循环遍历列表或数组,然后利用EL表达式进行数据操作,是常见的做法。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*,edu.nustti.dao.*,edu.nustti.dao.impl.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <form action="/STU_manager/servlet/UserServlet?action=register" name="f1" method="post">
用户名: <input type="text" name="userName">
密 码: <input type="password" name="password">
姓 名: <input type="text" name="trueName">
性 别: <input type="radio" checked="checked" name="sex" value="0">男 <input type="radio" name="sex" value="1">女
生 日: <select name="y"> <c:forEach begin="1990" end="2010" var="y"> <option value="${y}">${y}</option> </c:forEach> </select> <select name="m"> <c:forEach begin="1" end="9" var="m"> <option value="0${m}">${m}</option> </c:forEach> <c:forEach begin="10" end="12" var="m"> <option value="${m}">${m}</option> </c:forEach> </select> <select name="d"> <c:forEach begin="1" end="9" var="d"> <option value="0${d}">${d}</option> </c:forEach> <c:forEach begin="10" end="31" var="d"> <option value="${d}">${d}</option> </c:forEach> </select>
爱 好: <% FavoritesDao dao1 = new FavoritesDaolmp1(); // 创建爱好存储业务模型 List list1 = dao1.getAllFavorates(); request.setAttribute("F", list1); %> <c:forEach var="f" items="${F}"> <input type="checkbox" name="favorates" value="${f.id }">${f.favorate} </c:forEach>
班 级: <% ClassesDao dao2 =(ClassesDao) new ClassesDaoImpl(); // 创建班级存储业务模型 List list2 = dao2.getAllClasses(); request.setAttribute("C", list2); %><select name="classId"> <c:forEach var="c" items="${C}"> <option value="${c.id}">${c.className}</option> </c:forEach> </select>
介 绍: <textarea rows="10" cols="20" name="introduction"></textarea>
<input type="submit" value="注册">
</form> </body> </html>检查代码

2023-05-19 上传