
下面我就跟你们详细介绍下c中foreach的用法的用法,希望对你们有用。
c中foreach的用法的用法如下:
c:forEach>用法 博客分类: ?J2EE
CC++C#JSPSQL
<c:forEach>
<c:forEach>为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法
语法1:迭代一集合对象之所有成员
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
[begin="begin"] [end="end"] [step="step"]>
本体内容
<
/c:forEach>
语法2:迭代指定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
本体内容
</c:forEach>
标签具有以下一些属性:
var:迭代参数的名称。在迭代体中可以使用的变量的名称,用来表示每一个迭代变量。类型为String。
items:要进行迭代的集合。对于它所支持的类型将在下面进行讲解。
varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。
begin:如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。
end:如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。
step:迭代的步长。
标签的items属性支持Java平台所提供的所有标准集合类型。此外,您可以使用该 *** 作来迭代数组(包括基本类型数组)中的元素。它所支持的集合类型以及迭代的元素如下所示:
java.util.Collection:调用iterator()来获得的元素。
java.util.Map:通过java.util.Map.Entry所获得的实例。
java.util.Iterator:迭代器元素。
java.util.Enumeration:枚举元素。
Object实例数组:数组元素。
基本类型值数组:经过包装的数组元素。
用逗号定界的String:分割后的子字符串。
javax.servlet.jsp.jstl.sql.Result:SQL查询所获得的行。
不论是对整数还是对集合进行迭代,的varStatus 属性所起的作用相同。和var属性一样,varStatus用于创建限定了作用域的变量(改变量只在当前标签体内起作用)。不过,由varStatus属性命名的变量并不存储当前索引值或当前元素,而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性,它们描述了迭代的当前状态,如下这些属性的含义如下所示:
current:当前这次迭代的(集合中的)项。
index:当前这次迭代从0开始的迭代索引。
count:当前这次迭代从1开始的迭代计数。
first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。
begin:begin属性的值。
end:end属性的值
step:step属性的值
下面就来看一个个基本的例子,表格隔行背景色变化
xml 代码
<c:forEach var="item" items="${contents}" varStatus="status">
<tr <c:if test="${status.count%2==0}">bgcolor="#CCCCFE"</c:if>align="left">
xxx
</tr>
</c:forEach>
限制
·假若有begin属性时,begin必须大于等于 0
·假若有end属性时,必须大于begin
·假若有step属性时,step必须大于等于0
Null 和 错误处理
·假若items为null时,则表示为一空的集合对象
·假若begin大于或等于items时,则迭代不运算
FOREACH标签部分.首先确认MAP中有没有取得数据.
<c:forEach [var="varName"] items="" [varStatus="varStatusName"]
FOREACH标签含义: items存放被迭代的集合对象, var用来存放现在指到的成员。
3. var元素输出的参数需要与MAP中存放的参数对应,(通常用一个JAVABEAN对像封装放在LIST等集合对像中).案例中的,NAME等值是否在JAVABEAN中存在.如果存在,EL表达式写法为: ${entry.name}即可直接输入,其他值也是一样.
IF标签部分.
EL表达式有自己的判断方式,无法直接用==,!=,>=,<=直接判断.
如果要判断封装对像是否为空.请用empty关键字....
以下是IF标签与FOREACH综合用法的示例:
<!-- 如果集合中不为空,输出数据! --><c:if test="${!empty adminlist}"> <c:forEach items="${adminlist}" var="list"> <tr> <td>${list.id}</td> <td>${list.name}</td> <td>${list.pwd}</td> </tr> </c:forEach></c:if><!-- 如果集合中为空,直接在HTML中输出提示! --><c:if test="${empty adminlist}"> 未能找到数据! </c:if>
为了能更好的显示出FOREACH的效果.通常先用choose标签进行判断,以下是JSP页面中的完整标签片段示例:(IF标签不再举例.)
<table cellpadding="5" cellspacing="1" border="0" width="100%" align="center"> <tr align="center"> <td>ID</td> <td>用户帐号</td> <td>用户密码</td> <td colspan="2">管理</td> </tr><c:choose> <c:when test="${!empty userlist}"> <c:forEach items="${userlist}" var="list"> <tr> <td>${list.id}</td> <td>${list.name}</td> <td>${list.pwd}</td> <td> <a href="UserEdit.jspx?action=update&id=${list.id}">编缉</a> </td> <td> <div onClick="return del()"> <a href="UserEdit.jspx?action=delete&id=${list.id}">删除</a> </div> </td> </tr> </c:forEach> </c:when> <c:otherwise> <tr> <td colspan="5">未能找到符合条件的数据!</td> </tr> </c:otherwise> </c:choose></table>
你最终的目的应该是想在input按钮上加入点击事件吧,点击后将input的值写入cookie吧,这样
的话,给tr加事件是没有意义的,下面的代码在不引用任何构架的前提下实现的,没有使用jquery
也没有使用ExtJS,相对比较麻烦些,希望你能看懂,如果用jquery的话,更简单了,这里就不写了
function writeCookie(name, value) {// 写入cookie的代码你自己去实现
}
var rows = new Array() // 这个表格行的数组你自己组织吧,我这里只是定义一个简单的js数组,你可以从后台取这个值
// 先生成HTML代码,输出到网页上,这样才用JS绑定事件
var strHTML = ''
for(var i=0 i<rows.length i++) {
strHTML='<tr>' +
'<td><input id='btn_" + i + "' type="hidden" value='" + rows[i].id + "' /></td>' +
'<td>无关紧要的内容</td>' +
'</tr>'
}
document.writeln(strHTML)
// 绑定事件
for (var i=0 i<rows.length i++) {
var btnName = 'btn_' + i
var e = document.getElementById(btnName) // 循环取出每个按钮对象
var value = e.value // 取出按钮的值
e.onclick = function() {
writeCookie(btnName, value) // 以btnName作为键名,将按钮的值写入cookie
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)