我正在获取"错误500:javax.el.elexception:class [java.lang.number]必须公开,non-abstract,而不是接口"。
这是日志。
000001f8 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: An exception was thrown by one of the service methods of the servlet [/WEB-INF/pages/tpl/docDetail.jsp] in application [gsa]. Exception created : [javax.el.ELException: The class [java.lang.Number] must be public, non-abstract and not an interface
at javax.el.ImportHandler.findClass(ImportHandler.java:231)
at javax.el.ImportHandler.resolveClass(ImportHandler.java:185)
at javax.servlet.jsp.el.ScopedAttributeELResolver.getValue(ScopedAttributeELResolver.java:140)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:80)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:815)
at com.ibm._jsp._docDetail._jspx_meth_c_out_1(_docDetail.java:311)
at com.ibm._jsp._docDetail._jspService(_docDetail.java:130)
at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:99)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1235)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:220)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1124)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1390)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:196)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
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)
这是我的docdetail.jsp页面代码:
<%-- --------------- LANGUAGE --------------- --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%-- --------------- TAGLIBS --------------- --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%-- --------------- IMPORTS --------------- --%>
<%@page import="java.util.List,java.util.Iterator,
com.vw.gsasearch.domain.tpl.model.TplProcess" %>
<c:set var="cssURL">
<bean:message key="css.elsa.vw" />
</c:set>
<c:set var="cssURL">
<html:rewrite page="${cssURL}" />
</c:set>
<html>
<head>
<LINK href='<c:out value="${cssURL}" />' rel="stylesheet" type="text/css" />
<style>
td{
color: #000000;
font-size: 10pt;
font-family: Arial, Helvetica, sans-serif;
text-decoration: none;
}
</style>
<script language="JavaScript" type="text/javascript">
var g_count;
var g_position;
function disableButtons() {
if (top['barFs']) {
g_count = '<c:out value="${Number}"/>';
g_position = '<c:out value="${Position}"/>';
if (!(top['barFs'].disableButtons)) {
window.setTimeout("delay100()", 100);
} else {
top['barFs'].disableButtons(g_count, g_position);
}
}
}
function delay100() {
if (!(top['barFs'].disableButtons)) {
window.setTimeout("delay100()", 100);
} else {
top['barFs'].disableButtons(g_count, g_position);
}
}
</script>
</head>
<body class="elsaBackground_light" onload="disableButtons();">
<form>
<table cellpadding="5" cellspacing="5">
<tr>
<%-- <td><bean:message key="process.pid" bundle="TPL" />:</td>
<td><select class="readonlyInput" readonly="readonly" name="kdnr" size="1">
<option> </option></td> --%>
<td><bean:message key="process.revised" />: </td>
<td><c:out value="${procedure.changeDate}" /></td>
</tr>
</table>
</body>
<%-- remove session atrribute --%>
<%--<c:remove var="procedure" scope="session" /> --%>
</html>
修复您的变量名称以遵守Java命名约定,此问题将消失。
罪魁祸首在这里:
<c:out value="${Number}"/>
和EL 3.0的新"进口常量"功能:
at javax.el.ImportHandler.findClass(ImportHandler.java:231)
at javax.el.ImportHandler.resolveClass(ImportHandler.java:185)
在Java中,变量名称以小写字母开始,班级名称从大写开始。由于EL 3.0,java.lang.*
软件包中的任何内容都隐含在EL范围中,因此也会导入java.lang.Number
。换句话说,当您在与java.lang.Number
类匹配的EL中引用${Number}
时,它尝试加载它无法做到,因为它是abstract
。
,但这毕竟不是您的意图。您显然意图参考一个自定义变量,您只是错误地称为Number
而不是number
。
为什么在地球Apache El中试图解决${Number}
,而根本没有任何常数是一个不同的问题。您最好向Tomcat Guys报告一个问题。