Core Java Faces -第3版(Cay Horstmann):第4章选择标签第165页示例不起作用



我不知道我应该如何把这个问题,因为'有几个文件(.java, .xhtml等)涉及。无论如何,这个程序涉及几个复选框(selectmanycheckbox)和其他。在这个selectmanycheckboxes上有一个onchange=submit()

我注意到:

  1. 每个复选框生成的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]。任何想法?

[Iint[]类型的签名。这个异常告诉我们,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/

下载

最新更新