gpt4 book ai didi

java -
转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:04 26 4
gpt4 key购买 nike

这让我抓狂,找不到错误。

这里是 xhtml 页面:

...
<h:selectManyListbox style="width: 207px" size="10" value="#{reportBean.selectedSeverities}">
<f:selectItems value="#{reportBean.severities}"/>
</h:selectManyListbox>
...

报告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;
}

对于命令按钮,我有以下操作方法:

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 雷恩

最佳答案

您不能将枚举与 h:selectMany*** 结合使用不使用转换器的组件。 JSF/EL 看不到/不知道每个单独列表项的通用类型。换句话说,它只看到 List。而不是 List<Severity>并将每个项目视为 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 时,您应该在 <converter> 中将其声明为 faces-config.xml 而不是 @FacesConverter )

您按如下方式使用:

<h:selectManyListbox converter="severityConverter">

另见:

关于java - <h :selectManyListbox JSF and Enums Class Cast error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340762/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com