折磨人的EL表达式
来源:互联网 发布:英语造句软件 编辑:程序博客网 时间:2024/04/30 09:34
最近被一个小小的问题折磨了将近一周。
事情是这样的,我用jstl标签库写了一个构建楼盘表的页面。(目前在做北京建委的房屋全生命周期平台)
在页面中我定义了这样两个变量:
<fmt:formatNumber type="number" var="uc" value="${(upColumnCount-1)/2}" maxFractionDigits="0" />
<fmt:formatNumber type="number" var="dc" value="${(downColumnCount-1)/2}" maxFractionDigits="0" />
以下变量说明:upColumnCount为地上楼盘表的总列数
downColumnCount为地下楼盘表的总列数
总列数又包括这样的信息,第一列为楼层数,然后接下来成对出现的为该楼层的所以户信息,成对信息中的第一列为户ID,第二列为户名称,所以除了楼层数,地上楼盘表的列数我定义了一个变量uc,其值为:(upColumnCount-1)/2,同理地下楼盘表其列数dc为:(downColumnCount-1)/2
定义好这两个变量好,我在页面中要做以下处理:
如果地上楼盘表的列数大于地下楼盘表的列数,则直接在地上楼盘表下面循环输出地下楼盘表,然后偱环输出完之后还要判断uc>dc的话,地下楼盘表剩下的列表中填充空格。问题出就出在这儿,我在页面这样写:
<c:if test="${uc>dc}">
<c:forEach var="j" begin="1" end="${uc-dc}" step="1">
<td align="center">
</td>
</c:forEach>
</c:if>
页面还有多处这样的判断处理。
结果导致我的页面前台有时候正常输出,有时候不能正常输出,打印出来的源码中总是代码不全,而后台则报:
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspTagException: 'end' < 0
at javax.servlet.jsp.jstl.core.LoopTagSupport.validateEnd(LoopTagSupport.java:487)
at org.apache.taglibs.standard.tag.rt.core.ForEachTag.setEnd(ForEachTag.java:62)
at org.apache.jsp.extend.houseA.page.modul.bof.bof_005flpew_005freport_jsp._jspx_meth_c_005fforEach_005f4(bof_005flpew_005freport_jsp.java:1575)
at org.apache.jsp.extend.houseA.page.modul.bof.bof_005flpew_005freport_jsp._jspx_meth_c_005fif_005f3(bof_005flpew_005freport_jsp.java:1545)
at org.apache.jsp.extend.houseA.page.modul.bof.bof_005flpew_005freport_jsp._jspx_meth_c_005fwhen_005f4(bof_005flpew_005freport_jsp.java:1334)
at org.apache.jsp.extend.houseA.page.modul.bof.bof_005flpew_005freport_jsp._jspx_meth_c_005fchoose_005f4(bof_005flpew_005freport_jsp.java:1281)
at org.apache.jsp.extend.houseA.page.modul.bof.bof_005flpew_005freport_jsp._jspService(bof_005flpew_005freport_jsp.java:321)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.longtop.common.filter.SetEncodingFilter.doFilter(SetEncodingFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
我仔仔细细的检查了代码,第一逻辑判断上没有错,第二代码也没有写错的地方。
可它究竟为什么会报这样的错误呢?
我在网上也疯狂的找寻答案,发现遇到相同问题的人还真不少,寻找解答的贴子也不少,可就是没有人给出答案。
没有办法还得靠自己解决。
我一点一点的调试,因为这个页面相当复杂,套用了大量的<c:choose>及嵌套的<c:if>语句。既然页面报JspTagException: 'end' < 0
这个错误,我想我就从 <c:forEach >这儿进行一步一步的调试吧,先删了一些觉得有问题的代码,然后在<c:if test="${uc>dc}">这样的判断语句中打印输出了一些内容,竟然发现当uc=79,dc=230的时候,<c:out value="${uc>dc}"></c:out>这个打印的是true!!!!
看来问题找到了,EL表达式中难道变量不能直接进行比较?
我试着把所有这样的比较改成:<c:if test="${(uc-dc)>0}">,页面终于成功了,一切OK!
就这样一个小小的问题折腾了我将近一个星期,写下日志,做为备份,下次不要再出现这样的问题,看来,简单好用的EL语句有时候并不是万能的!
- 折磨人的EL表达式
- 碎片感悟,折磨人的PlaceholderFragment,折磨人的fragment_main
- 感谢折磨你的人
- 折磨人,中国人的最爱
- 链表,折磨人的数据结构
- EL表达式的使用
- EL表达式的应用
- EL表达式的scope
- EL表达式的详解
- EL表达式的总结
- El表达式的使用
- El表达式的使用
- EL表达式的应用
- el表达式的使用
- 强大的el表达式
- el表达式的判断
- EL 表达式的用法
- EL表达式的应用
- 我的csdn
- java访问权限修饰符
- 在Visual C++中如何利用UDL文件来建立ADO连接
- ubuntu 10 安装matlab
- 归并排序
- 折磨人的EL表达式
- JPA一对多关系,在一端更新所包含多端引用的问题
- java Spring Security 总结一 5
- 邮件安全技术
- 回过头来看Silverlight之一
- java Spring Security 总结一 6
- 太高兴了。。找到了《电机及拖动基础》第四版,下册的答案了。。给大家分享一下。。
- VS开发常用技巧
- 2010.07.11