gpt4 book ai didi

JSF 2 : noSelectionOption problem for selectOneMenu with converter

转载 作者:行者123 更新时间:2023-12-01 07:30:48 31 4
gpt4 key购买 nike

我目前正在测试 的使用f:selectItems 使用现有 POJO 类的标记。

这工作正常:

面:

<h:selectOneMenu value="#{selectionLabBean.oneSelectMenuPojo}" 
converter="heroConverter">
<f:selectItems value="#{selectionLabBean.heroList}"
var="hero" itemValue="#{hero}" itemLabel="#{hero.name}" />
</h:selectOneMenu>

托管 bean :
private HeroBean oneSelectMenuPojo;
public HeroBean getOneSelectMenuPojo() {
return oneSelectMenuPojo;
}
public void setOneSelectMenuPojo(HeroBean oneSelectMenuPojo) {
this.oneSelectMenuPojo = oneSelectMenuPojo;
}

然后,我想添加“选择一个..”选项,我这样做了:

面:
<h:selectOneMenu value="#{selectionLabBean.oneSelectMenuPojo}" 
converter="heroConverter">
<f:selectItem itemValue="NONE" itemLabel="Choose one .."
noSelectionOption="true"/>
<f:selectItems value="#{selectionLabBean.heroList}"
var="hero" itemValue="#{hero}" itemLabel="#{hero.name}" />
</h:selectOneMenu>

这将发生异常:

java.lang.ClassCastException: java.lang.String cannot be cast to user.ui.HeroBean



我想我明白这个问题了。我使用转换器将 POJO 映射到选择,反之亦然,“选择一个”映射到字符串。但我也想把“选择一个..”的字符串。我能做些什么来解决这个问题?

这是我的转换器类:
@FacesConverter("heroConverter")
public class HeroBeanConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent ui,
String newValue) {
return HeroBean.findHeroBeanByName(newValue);
}

@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
return ((HeroBean) value).getName();
}
}

最佳答案

其中之一应该有效:

<f:selectItem itemLabel="Choose one .." 
noSelectionOption="true"/>

<f:selectItem itemValue="#{null}" itemLabel="Choose one .."
noSelectionOption="true"/>

关于JSF 2 : noSelectionOption problem for selectOneMenu with converter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4552578/

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