2012-01-18 85 views
1

我得到这个异常:类型不匹配:不能从布尔转换为Boolean

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

我使用Tomcat 5.5.23 。 29在jsp文件:/jsp/general/pos/DoMultiWordFrozen.jspf
类型不匹配

org.apache.jasper.JasperException:无法编译类JSP:在行发生
错误:无法从布尔型转换为布尔型
26:
27:item =(ItemType)session.getAttribute(“item”);
28:id = Integer.parseInt((String)session.getAttribute(“id”));
29:newItem = Boolean.valueOf((String)session.getAttribute(“newItem”));
30:changeGroup = null;
31:
32:如果(!!!的newitem & & item.getMultiWordFrozen()= NULL & & ID = 0){
堆栈跟踪:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(jasper5-编译器-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-编译器-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-编译器5.5.23.jar.s o) 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。所以)

的newitem定义为:

boolean newItem = false; 

SOLUTION:

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

+0

尝试'newItem = session.getAttribute(“newItem”);' – hvgotcodes 2012-01-18 13:53:50

+0

似乎您正在使用Java版本低于1.5编译JSP。在1.5中,应该自动完成拆箱操作(从'box',即布尔对象转换为简单的'boolean'类型)。如果可能,我建议使用更新的JDK – Wizart 2012-01-18 14:00:33

+0

java -version Java版本“1.6.0_20” OpenJDK运行时环境(IcedTea6 1.9.10)(rhel-1.23.1.9.10.el5_7-x86_64) OpenJDK 64-位服务器虚拟机(构建19.0 - b09,混合模式) – yossi 2012-01-18 14:03:45

回答

4

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编译器。

+0

所以这个代码是如何工作在我的旧服务器上?只有在这个新的服务器上,我得到了这个消息 - 我猜是因为不同的碧玉 – yossi 2012-01-18 13:57:59

+2

@yossi - 也许你的旧服务器运行的是提供自动装箱/拆箱的Java的更新版本。 – 2012-01-19 07:38:38

+0

是的,你是对的,它使用1.4.2我更新了JDK到1.6,它现在工作正常,谢谢。 – yossi 2012-01-19 10:06:51

1

尝试使用这种替代线路29:

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

newItem没有在你的例子中定义,但我怀疑它是一个布尔值。将.booleanValue()添加到第29行的末尾,以便将解析的布尔对象转换为布尔原型。

相关问题