欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 1

程序员文章站 2022-04-20 19:00:27
...

最近在做Highcharts的过程中,在写js时,出现了以下异常:

 

严重: Servlet.service() for servlet jsp threw exception

org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 10.

Was expecting one of:

    "}" ...

    "." ...

    "[" ...

    ">" ...

    "gt" ...

    "<" ...

    "lt" ...

    ">=" ...

    "ge" ...

    "<=" ...

    "le" ...

    "==" ...

    "eq" ...

    "!=" ...

    "ne" ...

    "&&" ...

    "and" ...

    "||" ...

    "or" ...

    "*" ...

    "+" ...

    "-" ...

    "/" ...

    "div" ...

    "%" ...

    "mod" ...

    

at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)

at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)

at org.apache.el.parser.ELParser.DynamicExpression(ELParser.java:147)

at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:43)

at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:114)

at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:172)

at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:216)

at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)

at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:937)

at org.apache.jsp.page.M5.M5006_jsp._jspService(M5006_jsp.java:514)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at com.kayak.web.user.filter.LoginCertifyFilter.doFilter(LoginCertifyFilter.java:123)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at com.kayak.web.base.filter.LocalRequestFilter.doFilter(LocalRequestFilter.java:27)

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:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Thread.java:745)

 

这是加载页面时报的错,按异常来看,应该跟el表达式脱不了干系。而注意到由该jsp页面生成的servlet类里报的错误行数(如红色部分所示)。在tomcat中打开该行,发现:

 

out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${point.y:,.0f}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));

 会发现,跟$符号有关!其实,本意是在页面上直接显示$符号,表示美元符号,而并不想赋予它el表达式的含义。——这也是为啥我单独把该页面抽出来,不放在web环境,也就没经过tomcat。页面能正常显示的原因。

 

解决办法:加上转义符:

pointFormat: '<span style="color:{series.color}">{series.name}: <b>\${point.y:,.0f}</b><br>'

 其中\$即把$当成单纯的美元符使用。如果不转义,el的$根本无法解析point.y:,.0f !!

 

-------------------------------------------------------------------------------

附:

1.为了不让charts显示导出的menu

exporting: {
	 	    	   buttons:{
	 	    		   contextButton:{
	 	    			   enabled:false
	 	    		   }
	 	    	   }
	   }

 如果直接这样写:exporting : null 则会报错:can not read property 'buttons' of null(可通过查阅highcharts的API,其中有exporting 属性,即可知道原因。)

 

2.Uncaught Highcharts error #14: www.highcharts.com/errors/14

造成这个原因一般都是Highcharts的series里格式错误或者addPoint操作时格式错误,有时候你的数据来源是由后台加载,就必须注意通过aJax返回到前台的数据,必须是number(int float double等)的数据,而不是String.