关于PSTL的多分枝判断的语句问题
来源:2-5 JSTL判断标签
litter_
2019-05-30 19:03:56
老师,我跟着课件中的操作,界面却显示 500的错误,当我把多分枝的语句删去,又正常的显示,代码经过反复的检查,确认没有问题,不知道该如何的操作
jsp
<!-- choose when otherwise -->
<c:choose>
<c:when test="${grade=='D' }">
<h1>此语句被执行!</h1>
</c:when>
</c:choose>
HTTP Status 500 – Internal Server Error
Type Exception Report
Message An exception occurred processing JSP page [/core.jsp] at line [23]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.apache.jasper.JasperException: An exception occurred processing JSP page [/core.jsp] at line [23]
20:
21: <!-- choose when otherwise -->
22: <c:choose>
23: <c:when test="${grade=='D' }">
24: <h1>姝よ鍙ヨ鎵ц锛�</h1>
25: </c:when>
26: </c:choose>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.imooc.jstl.JstlServlet.doGet(JstlServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
javax.el.ELException: Cannot convert [D] of type [class java.lang.String] to [class java.lang.Long]
org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:400)
org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:379)
org.apache.el.lang.ELSupport.equals(ELSupport.java:173)
org.apache.el.parser.AstEqual.getValue(AstEqual.java:39)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:944)
org.apache.jsp.core_jsp._jspx_meth_c_005fwhen_005f0(core_jsp.java:290)
org.apache.jsp.core_jsp._jspx_meth_c_005fchoose_005f0(core_jsp.java:258)
org.apache.jsp.core_jsp._jspService(core_jsp.java:150)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.imooc.jstl.JstlServlet.doGet(JstlServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
1回答
同学你好。对于报错,我们首先要学会查看报错信息。以便进一步定位问题,寻找解决方案。
试着翻译一下,大体意思是,EL异常,不能将java.lang.String类型的“D”转换成java.lang.Long类型。回头再看发生异常的位置,在23行,也就是${grade == 'D'}出错。
为什么'D'会被转换成 Long 呢?原因是它和一个Long类型的变量在判等。同学可以检查一下自己定义额grade是何种类型,和老师的是否一致:
如果解答了同学的疑问,望采纳~
祝学习愉快~
相似问题