【问题标题】:Type mismatch: cannot convert from Boolean to boolean类型不匹配:无法从布尔值转换为布尔值
【发布时间】:2012-01-18 13:50:13
【问题描述】:

我得到了这个例外:

org.apache.jasper.JasperException: 无法为 JSP 编译类

我正在使用 tomcat 5.5.23。

org.apache.jasper.JasperException:无法为 JSP 编译类:
在 jsp 文件中的第 29 行发生错误:/jsp/general/pos/DoMultiWordFrozen.jspf
类型不匹配:无法从布尔值转换为布尔值
26:
27: item = (ItemType)session.getAttribute("item");
28: id = Integer.parseInt((String)session.getAttribute("id"));
29: newItem = Boolean.valueOf((String)session.getAttribute("newItem"));
30:更改组=空;
31:
32: if (!newItem && item.getMultiWordFrozen() != null && id != 0) {
堆栈跟踪:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.compiler.ErrorDispatcher.javacError(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.compiler.JDTCompiler.generateClass(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.compiler.Compiler.compile(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.compiler.Compiler.compile(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.compiler.Compiler.compile(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.JspCompilationContext.compile(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.servlet.JspServletWrapper.service(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.servlet.JspServlet.serviceJspFile(jasper5-compiler-5.5.23.jar.so) org.apache.jasper.servlet.JspServlet.service(jasper5-compiler-5.5.23.jar.so) javax.servlet.http.HttpServlet.service(tomcat5-servlet-2.4-api-5.5.23.jar.so)

newitem 定义为:

boolean newItem = false;

解决方案:

这是因为我使用了不包含autobxing旧 JDK 版本 升级到 jdk 1.6 (或任何 >= 1.5 )后。现在工作正常。

【问题讨论】:

  • 试试newItem = session.getAttribute("newItem");
  • 看来您使用的 Java 版本低于 1.5 来编译 JSP。在 1.5 中,应该自动完成拆箱(从“盒子”,即布尔对象转换为简单的“布尔”类型)。如果可能的话,我建议使用更新的 JDK
  • java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.10) (rhel-1.23.1.9.10.el5_7-x86_64) OpenJDK 64-Bit Server VM (build 19.0- b09,混合模式)

标签: java exception tomcat boolean


【解决方案1】:

Boolean.valueOf 返回 Boolean,而不是 boolean - 所以听起来你可能想要:

newItem = Boolean.valueOf((String)session.getAttribute("newItem")).booleanValue();

或者,也许更易读:

String newItemAttribute = (String) session.getAttribute("newItem");
newItem = Boolean.valueOf(newItemAttribute).booleanValue();

我有点惊讶它不会为您自动拆箱,但我想这取决于 Jasper 使用的 Java 编译器版本。

【讨论】:

  • 那么这段代码在我的旧服务器上是如何工作的?只有在这个新服务器上我才会收到这条消息 - 我猜是因为不同的碧玉
  • @yossi - 也许您的旧服务器正在运行提供自动装箱/拆箱的更新版本的 Java。
  • 是的,你是对的,它使用的是 1.4.2,我将 jdk 更新到了 1.6,现在可以正常工作了,谢谢。
【解决方案2】:

尝试将第 29 行替换为:

newItem = Boolean.valueOf((String)session.getAttribute("newItem")).booleanValue();

【讨论】:

    【解决方案3】:

    newItem 在您的示例中未定义,但我怀疑它是一个布尔值。将 .booleanValue() 添加到第 29 行的末尾,以将解析的布尔对象转换为布尔基元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多