关于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回答

芝芝兰兰

2019-05-31

同学你好。对于报错,我们首先要学会查看报错信息。以便进一步定位问题,寻找解决方案。

http://img.mukewang.com/climg/5cf087990001c70508310163.jpg

试着翻译一下,大体意思是,EL异常,不能将java.lang.String类型的“D”转换成java.lang.Long类型。回头再看发生异常的位置,在23行,也就是${grade == 'D'}出错。

http://img.mukewang.com/climg/5cf08837000149c708270425.jpg

为什么'D'会被转换成 Long 呢?原因是它和一个Long类型的变量在判等。同学可以检查一下自己定义额grade是何种类型,和老师的是否一致:

http://img.mukewang.com/climg/5cf0891100015b7c11080152.jpg

如果解答了同学的疑问,望采纳~

祝学习愉快~


0
hitter_
h 我在定义属性的时候,给属性赋值时使用的是单引号,'D',导致系统自动的将我的类型转换为了整数类型,所以会报错。谢谢指正,以后会多查看异常信息的
h019-05-31
共1条回复

0 学习 · 9666 问题

查看课程