<h:selectManyListbox JSF和Enums Class Cast错误
这让我发疯,找不到错误。
这里是xhtml页面:
... ...
报告Bean:
... private List severities; private List selectedSeverities = new ArrayList(); ... public List getSeverities() { if (this.severities == null) { this.severities = new ArrayList(); this.severities.add(Severity.LOW); this.severities.add(Severity.HIGH); this.severities.add(Severity.UNDEFINED); this.severities.add(Severity.MEDIUM); } return severities; }
对于命令按钮,我有以下操作方法:
if (!selectedSeverities.isEmpty()) { Severity s = selectedSeverities.get(0); } return;
Wenn我选择了一个严重性(枚举)并按下命令按钮我得到以下堆栈跟踪:
... Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to securityscan.util.Severity ...
我不明白。
任何帮助都非常赞赏。
BR Reen
您不能在不使用转换器的情况下将枚举与h:selectMany***
组件结合使用。 JSF / EL没有看到/知道每个单独列表项的generics类型。 换句话说,它只看到List
而不是List
并将每个项目视为String
,除非你告诉它不这样做。
您需要自己创建并指定转换器。 对于枚举,最好扩展JSF提供的EnumConverter
。
package com.example; import javax.faces.convert.EnumConverter; import javax.faces.convert.FacesConverter; @FacesConverter(value="severityConverter") public class SeverityConverter extends EnumConverter { public SeverityConverter() { super(Severity.class); } }
(请注意,当您仍在使用旧的JSF 1.2时,您应该在faces-config.xml
@FacesConverter
其声明为
而不是@FacesConverter
)
你使用如下:
也可以看看:
- 如何在选择多个菜单中使用枚举?