最近,项目遇到一个小问题,具体是点击事件触发窗口弹出,本地运行正常,而在线上环境发布运行时,死活打不开(ps:项目用的是easyui+spring mvc)
下面是弹出窗口的jsp,嵌套在iframe中。(标签库等文件都引入过)
<table>
<span style="white-space:pre"> </span><tr>
<c:choose>
<c:when test="${list!=null&&list.size()==0}">
<td>您在${warningDailyDate } 当天无记录</td>
</c:when>
<c:when test="${list!=null&&list.size()!=0}">
<td>您在${warningDailyDate } 当天记录如下:</td>
</c:when>
</c:choose>
</tr>
<tr>
<td>
<c:forEach items="${list}" var="attendance" varStatus="vs">
<span style="white-space:pre"> </span> <fmt:formatDate value='${attendance.punchTime}' type='date' pattern='yyyy-MM-dd HH:mm:ss'/>
<c:if test="${vs.last!=true}">,</c:if>
</c:forEach>
</td>
</tr>
<tr>
<td>
<font style="color:red">
注:blablabla </br>
</font>
</td>
</tr>
</table>
在线上环境,去掉<c:choose>标签就运行ok,最后发现是list.size()这个地方出了问题,我在本地运行正常,会去自动调用size()方法,本地和线上环境上,jsp所编译成的java文件也一样,到线上就痿了,估计是环境问题。
另外${list.size}是不行的,因为这个表达式执行时自动去调用了getSize()方法,但这个方法不存在则会出错,除非自己定义一个。
像平常${javabean.property}或者{javabean["property"]}其实是等同于${javabean.getProperty()},
线上环境的诡异问题具体不详,没继续研究了。
解决方案,用fn函数库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
list的长度是:${fn:length(list)}