我不知道我应该如何把这个问题,因为'有几个文件(.java, .xhtml等)涉及。无论如何,这个程序涉及几个复选框(selectmanycheckbox)和其他。在这个selectmanycheckboxes上有一个onchange=submit()
我注意到:
- 每个复选框生成的html有一个onchange=submit()。有趣的是,通过选中复选框,它每次都提交表单。
真正的问题是,当我选中其中一个复选框时,会出现与打印的完全相同的错误。
======================================================================java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;]
引起的:java.lang.ClassCastException - [I cannot cast to [Ljava.lang.Object;]
我不明白这里的意思。任何想法?
之后我所做的就是删除所有的复选框并提交表单。仍然得到相同的错误
任何想法?
源代码可在他们的网站上获得。您的特定代码在javaee/ch04/select
文件夹中提供。
为每个复选框生成的html有一个onchange=submit()。有趣的是,通过选中复选框,它每次都提交表单。
是由代码示例中的<h:selectManyCheckbox onchange="submit()" />
设置的。onchange
属性确实是完全不必要的。这可能是作者的疏忽。
真正的问题是当我选中其中一个复选框时,会出现与打印的完全相同的错误。
java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
我不明白这里的[I]。任何想法?
[I
为int[]
类型的签名。这个异常告诉我们,int[]
类型的实例不能被强制转换为Object[]
类型的实例。这反过来又没有意义,它应该工作得很好。这个特殊的问题是由别的东西引起的。
之后我所做的是删除所有复选框并提交表单。
代码示例中的<h:selectManyMenu>
也绑定到int[]
属性。
然而,删除它们并不是正确的解决方案。应该没问题。你的问题是由更深层次的东西引起的。这可能是所使用的EL实现中的错误。您使用的servlet容器是什么版本?您的web.xml
声明到哪个servlet API版本?您是否尝试升级servlet容器?
我假设您正在尝试在Tomcat 6上运行该示例
您的WEB-INF/lib文件夹应该只有这些文件:jsf-api.jar, jsf-impl.jar。你可以从http://javaserverfaces.dev.java.net/
下载在Tomcat/lib文件夹中,应该将el-api.jar文件替换为el-api2.2.jar文件。可以从http://download.java.net/maven/2/javax/el/el-api/2.2/