JSTL,EL用法的注意点Java.lang.NumberFormatException: For input string “ ”

今天使用stl 结合El做jsp页面展现,出现了个问题,怎么调也调不好,最后将jstl的源码拿来跟踪调了一下才明白其中的道理。

在使用jstl tag 的时候,一般可以用来在页面上展现集合的数据,但是有一点必须要注意的,就是var 和items的含义的问题。

查看api文档,上面只是简单的说明了一下,其实在实现该标签的时候,内部是通过items里面指定的这个集合对象来获取一个Iterator 的,这就是ForEachIterator 。也就是说先把你的items属性的那个集合对象拿出来,然后获取其上面的迭代器,通过该迭代器的next方法得到集合中的第一个元素(当然根据是否配置了start end 和step迭代的方法少有不同),这里就要注意了,获取到第一个元素以后,它会将该元素作为一个通用的object对象赋值给var属性里面指定的那个变量名称,例如你在var属性里面知道var=”item”,那么这时候i就是一个object对象。

如果你迭代的是一个list这样的自定义对象的list,那么这时候item会得到一个object,而且该object是一个object【】类型,也就是说,会将list里面的每个user对象的属性值get出来,作为一个object再存放到i所引用的那个object里面去,说到这里,大家就应该明白了,其实该标签在处理list类型的集合的展现问题的时候,是简单的将该集合中的每个具体对象的属性值取出来封装成一个个的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对象的按照定义先后顺序的各个属性值了。

可见,数据类型是很重要的了,使用不同的数据类型来保存值,那么取值的时候就要使用对应的方法来取值了,否则就会报异常了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag是一个Java异常,表示在运行时找不到指定的类。这个异常通常发生在使用JSP标签库时,缺少了相应的类文件。 解决这个问题的方法是确保你的项目中包含了正确的JSTL库,并且这些库的版本与你的代码兼容。你可以按照以下步骤来解决这个问题: 1. 确认你的项目中包含了JSTL库。你可以在项目的构建路径或依赖项中查看是否包含了正确的JSTL库。 2. 检查JSTL库的版本。确保你使用的JSTL库的版本与你的代码兼容。如果版本不匹配,可能会导致找不到类的错误。 3. 检查JSTL库的路径。确保JSTL库的路径正确,并且可以被项目正确访问到。你可以检查路径是否正确,并且确保库文件存在于指定的路径中。 4. 清理和重新构建项目。有时候,清理和重新构建项目可以解决一些编译或构建相关的问题。你可以尝试清理和重新构建你的项目,然后再次运行看看是否还会出现这个错误。 5. 检查类路径。确保你的项目的类路径正确设置,并且可以找到JSTL库中的类。你可以检查类路径是否正确,并且确保JSTL库中的类文件可以被正确加载。 6. 检查部署环境。如果你的项目是部署在服务器上的,确保服务器上也安装了正确的JSTL库,并且配置正确。 这些是解决java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag异常的一些常见方法。根据你的具体情况,你可以尝试其中的一种或多种方法来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值