我正在使用
<p:selectCheckboxMenu value="#{bean.selectedItems}">
<f:selectItems value="#{bean.availableItems}" />
</p:selectCheckboxMenu>
private List<Long> selectedItems;
private Map<String, Long> availableItems;
提交表单并按如下方式循环选择项目时,
for (int i = 0; i < selectedItems.size(); i++) {
Long id = selectedItems.get(i);
// ...
}
然后我得到一个类强制转换异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at com.example.Bean.submit(Bean.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 27 more
也会出现同样的问题
这是怎么造成的,我该如何解决?
您的问题是由以下事实引起的:
String
s的形式获取逻辑结果是:EL看不到任何泛型类型信息。EL没有看到列表
解决方案很简单:为
String
到Long
显式指定一个转换器。您可以使用JSF内置的LongConverter
,它具有转换器IDjavax。面孔。长
。此处列出了其他内置转换器。
<p:selectCheckboxMenu ... converter="javax.faces.Long">
另一种不需要显式指定转换器的解决方案是更改
列表
private Long[] selectedItems;
如果使用复杂对象(javabean、entity、POJO等)作为选择项值,而不是JSF内置转换器的标准类型,如
Long
,那么同样的规则也适用。您只需要创建一个自定义的转换器
,并在输入组件的转换器
属性中明确指定它,或者如果可以使用T[]
,则可以依赖forClass
。“空转换器”的转换错误设置值详细说明了如何创建这样的转换器。
我有一个家庭作业要重构一些代码来使用泛型。我觉得我为类做得很对。这是我的东西 当涉及到实例化时,我得到一个ClassCastException错误: 线程“main”java.lang.ClassCastException中出现异常:类java.lang.String无法强制转换为类edu.csc.node(java.lang.String位于加载程序“bootstrap”的模块java.base
今天早上,我试图将LibraryFolder ClasspathContainer插件安装到我的Eclipse(STS 3.6.1)中:每次尝试执行时,安装它都会导致上述错误。 更糟糕的是,我试图从Eclipse Marketplace安装插件,但Eclipse在出现大量错误时开始崩溃,包括JVM崩溃。卸载两个插件都没有修复。我尝试了一个新的工作区和一个空白的Eclipse安装,但最终不得不安装以
结果: Main.java:22:错误:不兼容的类型:字符串不能转换为T返回Y;其中T是类型变量:T扩展类Vehicle 1错误中声明的字符串
MainActivity.java 对不起,我的英语很差。
问题内容: 我是Java的新手,正在尝试理解为什么第一个代码片段不会导致此异常,而第二个代码片段会导致此异常。由于在两种情况下都将字符串数组传递到Arrays.asList中,所以两个代码片段都不应该产生异常还是不产生异常? 第一个代码段(毫无例外): 第二段(导致上述异常): 如果相关,我正在Eclipse Helios中使用JavaSE 1.6。 问题答案: 对我来说(使用Java 1.6.0
我的代码有一个错误。 我的适配器类: 我的班级: