<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

你使用如下:

  

也可以看看:

  • 如何在选择多个菜单中使用枚举?