这让我发疯,找不到错误.
这里是xhtml页面:
...
<h:selectManyListbox style="width: 207px" size="10" value="#{reportBean.selectedSeverities}">
<f:selectItems value="#{reportBean.severities}"/>
</h:selectManyListbox>
...
Run Code Online (Sandbox Code Playgroud)
报告Bean:
...
private List<Severity> severities;
private List<Severity> selectedSeverities = new ArrayList<Severity>();
...
public List<Severity> getSeverities() {
if (this.severities == null) {
this.severities = new ArrayList<Severity>();
this.severities.add(Severity.LOW);
this.severities.add(Severity.HIGH);
this.severities.add(Severity.UNDEFINED);
this.severities.add(Severity.MEDIUM);
}
return severities;
}
Run Code Online (Sandbox Code Playgroud)
对于命令按钮,我有以下操作方法:
if (!selectedSeverities.isEmpty()) {
Severity s = selectedSeverities.get(0);
}
return;
Run Code Online (Sandbox Code Playgroud)
Wenn我选择了一个严重性(枚举)并按下命令按钮我得到以下堆栈跟踪:
...
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to securityscan.util.Severity
...
Run Code Online (Sandbox Code Playgroud)
我不明白.
任何帮助都非常赞赏.
BR Reen
如果不使用h:selectMany***
转换器,则不能将枚举与组件结合使用.JSF/EL没有看到/知道每个单独列表项的泛型类型.换句话说,它只会看到a List
而不是List<Severity>
将每个项目视为a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
(请注意,当您仍在使用旧的JSF 1.2时,您应该将其声明为<converter>
in faces-config.xml
而不是by @FacesConverter
)
你使用如下:
<h:selectManyListbox converter="severityConverter">
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4241 次 |
最近记录: |