empty/not empty EL表达式使用注意
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /main/index.jsp(79,6) "${not empty(LOGINNAME_OA)&¬ empty(LOGINPWD_OA)&¬ empty(ISCHECK_OA)&¬ empty(OAIP)}" contains invalid expression(s): javax.el.ELException: Function ':empty' not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1151)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:821)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1512)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2399)
org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
org.apache.jasper.compiler.Validator.validate(Validator.java:1739)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:166)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.philisense.base.MessageFilter.doFilter(MessageFilter.java:26)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
com.philisense.base.AuthenticationFilter.doFilter(AuthenticationFilter.java:105)
com.philisense.base.MessageFilter.doFilter(MessageFilter.java:26)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
今天在用EL表达式时发现empty不太好使出现如上的错误,但在同样的代码在他人机器好使,于是查了一下发现反应此问题还挺多的,有许多人反映跟jdk和tomcat的版本相关,无意间在网上发现了这篇贴子的回帖解决了此问题(将not empty(xx)改为not empty (xx),即是在empty与()之间加上空格,具体看帖子的绿色字体的回帖解释),在此分享一下:
链接地址:http://jira.codehaus.org/browse/MRM-905
Details
-
Type:
Bug -
Status:
Closed -
Priority:
Blocker -
Resolution:Fixed
-
Affects Version/s:1.1
-
Fix Version/s:1.1.2
-
Component/s:Web Interface
-
Labels:None
-
Environment:Windows XP SP3 FR
java (JDK) "1.6.0_07"
apache tomcat "6.0.18"
activation-1.1.jar
mail-1.4.jar
derby-10.1.3.1.jar
-
Number of attachments :
Description
After installing as Wiki said, as a tomcat WAR, i get parsing error in some JSP/TAG code.
Some examples :
org.apache.jasper.JasperException: /WEB-INF/jsp/components/companyLogo.jsp(22,0) "${!empty(organisationLogo)}" contient d'incorrecte(s) expression(s): javax.el.ELException: Function ':empty' not found
org.apache.jasper.JasperException: /WEB-INF/tags/currentWWUrl.tag(29,0) "${!empty(action) && !empty(namespace)}" contient d'incorrecte(s) expression(s): javax.el.ELException: Function ':empty' not found
I've added logs as attachments.
The workaround is very simple :
replace EL exepressions containing "empty(" with "empty (", and "not(" with "not (" as EL expression requires.
This is a VERY strange error since i've successufully setup Archiva on my profesionnal server, and i got these error on two distinct personnal systems.
I'll check the professionnal/personnal system differences.

浙公网安备 33010602011771号
I couldn't replicate this on trunk (-r685734), with the following environment: