jsti 和EL用法注意点
今天使用stl 结合El做jsp页面展现,出现了个问题,怎么调也调不好,最后将jstl的源码拿来跟踪调了一下才明白其中的道理。
在使用jstl tag <c:forEach var="item" items="${managerPurviewList}" begin="0"> 的时候,一般可以用来在页面上展现集合的数据,但是有一点必须要注意的,就是var 和items的含义的问题。
查看api文档,上面只是简单的说明了一下,其实在实现该标签的时候,内部是通过items里面指定的这个集合对象来获取一个Iterator 的,这就是ForEachIterator 。也就是说先把你的items属性的那个集合对象拿出来,然后获取其上面的迭代器,通过该迭代器的next方法得到集合中的第一个元素(当然根据是否配置了start end 和step迭代的方法少有不同),这里就要注意了,获取到第一个元素以后,它会将该元素作为一个通用的object对象赋值给var属性里面指定的那个变量名称,例如你在var属性里面知道var="item",那么这时候i就是一个object对象。
如果你迭代的是一个list<User>这样的自定义对象的list,那么这时候item会得到一个object,而且该object是一个object【】类型,也就是说,会将list里面的每个user对象的属性值get出来,作为一个object再存放到i所引用的那个object里面去,说到这里,大家就应该明白了,其实该标签在处理list<User>类型的集合的展现问题的时候,是简单的将该集合中的每个具体对象的属性值取出来封装成一个个的object,然后放入item这个object数组中去的,所以,我们在前台jsp页面上展现的时候不能使用$(item.userName)这样的方法来得到对应的值,否则会报java.lang.NumberFormatException: For input string: "userName" 这样的异常的,原因就是因为返回的item是一个object的数组,$(item.userName)这种访问方式是不能用来访问数组的,否则在处理的时候jsp引擎会先将userName这个字符串转换成int以确定数组下标,而在转换的时候就会出现字符串“userName”无法转换成int的异常了。
那么我们该怎么取值呢,应该是一下标来访问数组,也就是item【0】,item【1】,这样的方式,这样渠道的值分别是我们User对象的按照定义先后顺序的各个属性值了。
可见,数据类型是很重要的了,使用不同的数据类型来保存值,那么取值的时候就要使用对应的方法来取值了,否则就会报异常了。
jsti 和EL用法注意点的更多相关文章
- 基于Vue实现后台系统权限控制
原文地址:http://refined-x.com/2017/08/29/基于Vue实现后台系统权限控制/,转载请注明出处. 用Vue/React这类双向绑定框架做后台系统再适合不过,后台系统相比普通 ...
- struts2中#,$,%的用法以及el,ognl表达式的用法
OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例 取Session中的值 <c:out value="${sessionScope.user.userId}&quo ...
- EL表达式 requestScope initParam用法
EL表达式 requestScope initParam用法: servlet: package com.stono.servlet; import java.io.IOException; impo ...
- jsp EL表达式和JSTL标签if-else if-else用法
java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法一.条件运算符 ${user.gender==?'男':'女'} 二.if() <c:if ...
- jsp中的JSTL与EL表达式用法
JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. ...
- jstl与el结合常见用法
JSTL Functions标签库 在JSP文件中使用Functions标签库,要先通过taglib指令引入该标签库: <%@taglib uri=”http://java.sun.com/js ...
- EL表达式多条件或判断用法
简单记录一EL表达式的判断用法 <c:if test="${(order.status == '06'&& order.type=='02') || (order.st ...
- 一、jsp和Servlet基础理论及jstl和EL表达式用法
1.题外话:使用JSP有近一年半的时间了,但是开发量不大.昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示.并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页 ...
- JSP 中EL表达式用法详解
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
随机推荐
- c程序中出现segment error 和 bus error 的原因
在c程序中,经常会遇到段错误(segment error)和总线错误(bus error),这两种问题出现的原因可能如下 段错误: 对一个NULL指针解引用. 访问程序进程以外的内存空间. 实际上,第 ...
- SQL Server 2008 修改表所有者,架构
ALTER SCHEMA 新架构 TRANSFER 旧架构.对象名称
- 利用googleapis在日文系统中改善中文字
加入以下两句 1. <head> <link rel="stylesheet" href="http://fonts.googleapis.com/ea ...
- 深度学习(dropout)
other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...
- I/O复用
1.I/O模型 一个输入操作通常包括两个不同阶段:等待数据准备好:从内核到进程拷贝数据. 阻塞I/O模型 非阻塞I/O模型 I/O复用模型:内核发现进程指定的一个或多个I/O条件就绪,它就通知进程,由 ...
- 【转】Linux学习之路--启动VNC服务
我的Linux是Fedora 13,安装方法如下: 1.打开终端,执行 # yum install -y tigervnc tigervnc-server 2.编辑/etc/sysconfi/vncs ...
- new与malloc
首先将new与malloc的区别总结如下: 1 new可以自动计算需要分配多大的内存,而malloc必须指明. 2 new返回的指针是有类型的,malloc返回void*类型的指针. 3 new在分配 ...
- android中回调函数机制完全解析
1.在要调用的业务操作中,创建一个接口,在接口中创建方法,这个方法表示的是我们原先要在业务类中执行的操作 public interface BackUpSmsListener { /** * 设置总进 ...
- 开始研究tigase和android客户端的实现
2015.7.5. 昨晚总算把tigaase7.0的开发环境搭起来了.稍微看了下代码结构. 主要是auth,db,compnent,cluster,server,xmpp,这几块,准备先发点时间看看开 ...
- 使用Fiddler针对Android手机网络请求抓包
本文转载自大牛Trinea的博文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信. ...