jsp实验中:tag文件报java.util.ArrayList cannot be cast to java.lang.String

描述

jsp实验中:tag文件报java.util.ArrayList cannot be cast to java.lang.String

解决思路

(1)第一步:可以看到信息中主要是Exception描述:
他描述23行处理出问题,23行是调用tag文件,也就是tag文件的处理出了问题。
(2)然后第二步,看root cause。可以看到最顶部提到ArrayList cannot be cast to String。
这就是关键,问题在哪里就靠这句话。
(3)最终定位问题是tag文件中不使用request设置attribute,而我使用了这个。这是一个问题。另一个问题是variable默认是返回String,但是我要返回ArrayList,没有做相应的设置,最终出现这个结果。修改后问题解决。
variable默认返回类型如下修改:
jsp实验中:tag文件报java.util.ArrayList cannot be cast to java.lang.String

后言

解决这个问题用了将近1.5个小时,还是对tag文件的使用不够熟练。
出现问题后,先在代码里加system.out.println确定哪部分没执行。
然后,使用debug观察变量的变化情况,以及语句执行情况,发现数据库可以连接,也可以查询出来结果,但是始终有上图的错误说是ArrayList不能转String。从这里出发逐个排查问题,但是就是在认知范围里代码是正确的,为什么不行呢?没办法了去找书吧,打开jsp的课本翻到tag那一节。
恍然大悟,有一句话“Tag文件将对象的名字及其引用存储到jspContext中,JSP页面才可以使用该对象。”怪不得我在排查问题中发现设置到request的attribute中的值,输出的是null。然后接着往下读,variable默认返回的是String类型,而我要返回的是ArrayList,正是上面的问题信息,至此,问题得解。这也是书籍一个重要作用之一吧。。

上一篇:Java mybatis mysql 常用数据类型对应关系


下一篇:java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.cho