`
vefan
  • 浏览: 85596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EL表达式中使用三目运算符在Tomcat不同版本中的表现

阅读更多
2010-9-10 11:50:42 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet authentication threw exception
org.apache.jasper.JasperException: /WEB-INF/pages/hr/tabfieldconfig/newField.jsp(91,74) "${param.ftablename==null?examField.ftabblename:param.ftablename}" contains invalid expression(s): javax.el.ELException: Error Parsing: ${param.ftablename==null?examField.ftabblename:param.ftablename}
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1149)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
	at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2392)
	at org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	at org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)


    我在JSP页面中使用了EL表达式${param.ftablename==nullexamField.ftabblename:param.ftablename},自己测试没有错误,放到同事机器上就报错(上面的错误),说我的写的不对,没见过EL表达式里使用三目运算符的,非得让我换成其他的判断形式,换就换,反正程序咋写都一样,有时间了自己查原因。
    问题不好查,一样的代码只是放到不同的机器上了,后来发现我用的Tomcat5.5版本,同事的是Tomcat6.0版本,开始以为是Tomcat6.0的一个bug或是不再支持那样的写法,后来通过规范代码,在运算符与表达式之间加空格,改为<c:out value="${param.ftableid==null ? examField.ftableid : param.ftableid}"></c:out>,就不报错了,正常运行。

    看来不是Tomcat6.0的bug,还是自己代码写的不规范,标准的三位运算表达式Expression1 ? Expression2 :Expression3,每个表达式和运算符之间,都有一个空格,否则Tomcat6.0是无法识别的。有点像Python的行为强制程序员写规范代码。

分享到:
评论

相关推荐

    三目运算符+正则表达式

    在编程世界中,三目运算符和正则表达式是两个非常重要的概念,它们各自扮演着独特的角色,同时也常被结合起来使用,以提高代码的简洁性和效率。让我们深入探讨这两个主题。 首先,三目运算符,也称为条件运算符,是...

    结合短路法和逗号表达式,代替if和三目运算符

    总之,短路法结合逗号表达式提供了一种替代传统if-else和三目运算符的可能性,特别是在需要编写更简洁代码的场景下。但其实际应用有限,需要在保持代码可读性和易维护性的同时谨慎使用。通过学习和掌握这种技巧,...

    C语言中的三目运算符

    三目运算符的实例 。

    Java 三目运算符

    在Java编程语言中,三目运算符(也称为条件运算符)是一种简洁且高效的方式来根据条件选择两个可能的值中的一个。它由三个操作数组成,因此得名“三目”运算符。 #### 二、语法结构 三目运算符的语法结构为: ``` ...

    三目运算符习题及参考答案

    三目运算符习题及参考答案

    c语言之三目运算符共2页.pdf.zip

    在C语言中,三目运算符(也称为条件运算符)是一种简洁的语法结构,用于根据条件执行不同的表达式。这个运算符具有三个操作数,因此得名“三目”。在C语言中,它的语法形式如下: `条件 ? 表达式1 : 表达式2` 如果...

    判断语句--三目运算符练习示例

    在实际项目中,合理地使用三目运算符可以使代码更加紧凑,同时保持清晰的逻辑结构。而对条件判断和输出的理解则是编程的基础,无论你是初学者还是经验丰富的开发者,都应该不断熟练掌握并应用这些概念。

    c++三目运算符

    c++三目运算符?: 语句的使用,介绍了对分数分级方式使用时的简便之处,可以节约代码书写量

    java入门教程:数据类型_三目运算符(又称条件运算符).docx

    虽然三目运算符提供了一种简洁的方式来实现条件分支逻辑,但在实际开发中应谨慎使用。原因在于,过度使用三目运算符可能会降低代码的可读性和可维护性,尤其是在逻辑较为复杂的场景下。因此,建议只在逻辑简单明了的...

    python-三目运算符.pdf

    使用条件表达式(即Python中的三目运算符)可以将上述代码简化为一行: ```python max_value = a if a &gt; b else b ``` 这里,`a &gt; b`是条件,`a`是在条件为真时的值,`b`是在条件为假时的值。 #### 四、条件...

    iOS中奇妙的三目运算符示例详解

    在iOS开发中,三目运算符(三元运算符)是一种高效、简洁的代码编写方式,尤其在处理条件判断和赋值时。它的符号是 `? :`,用于替代传统的 `if-else` 语句。这篇教程将深入探讨这个运算符在iOS中的应用和一些特殊的...

    判断语句 三目运算符代码

    判断语句 三目运算符代码

    三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分 它是唯一有3个操作数的运算符,有时又称为三元运

    三目运算符,也称为条件运算符,是编程语言中的一种高效表达方式,它允许根据条件的真假来决定执行不同的代码路径。这个运算符在C、C++、Java等语言中广泛存在,而在Python中则有其独特的实现方式。下面我们将深入...

    golang中为什么不存在三元运算符详解

    在Golang中,你可能会发现一个与其他编程语言不同的特点,那就是它不支持三元运算符。三元运算符通常在其他语言如Python、JavaScript、C++等中被广泛使用,其语法形式为`条件表达式 ? 真值表达式 : 假值表达式`。...

    第02章 Java编程基础 09 三目运算符与优先级

    首先,三目运算符是一种简洁的条件表达式,它提供了一种在一行代码中进行条件判断并返回不同结果的方法。其基本语法形式如下: ```java condition ? expression1 : expression2; ``` 这里,`condition` 是一个布尔...

    Java利用三目运算符比较三个数字的大小

    在 Java 中,我们可以使用三目运算符来比较三个数字的大小。例如,我们可以使用以下代码来比较三个数字的大小: ```java int a = 5, b = 8, c = 9; a = a &gt; b ? a : b; // 将较大值赋值给 a a = a &gt; c ? a : c; // ...

    三目运算符.cpp

    三目运算符.cpp

    三目运算符.py

    三目运算符.py

    java代码-加深三目运算符练习。

    在`main.java`文件中,你可能会看到以下类型的代码片段,用于演示和练习三目运算符的使用: ```java int a = 10; int b = 20; int max = a &gt; b ? a : b; // 如果a大于b,则max等于a,否则等于b ``` 这段代码定义了...

    在vue中v-bind使用三目运算符绑定class的实例

    当使用三目运算符时,我们实际上是在编写一个JavaScript表达式,根据表达式结果的真假来决定应用哪个类。三目运算符是一种简洁的条件表达式写法,其格式为`条件 ? 值1 : 值2`。当条件为真时,整个表达式的值为值1;...

Global site tag (gtag.js) - Google Analytics