鉴于此selectOneMenu
<h:selectOneMenu value="#{fb.aktionTxt}">
<f:selectItems value="#{myBean.FBAEnum}" />
</h:selectOneMenu>
这个bean代码
public FehlerBewertungAktionEnum[] getFBAEnum() {
return FehlerBewertungAktionEnum.values();
}
这个枚举
public enum FehlerBewertungAktionEnum {
NEKO_NEKO("NEK0-NEK0 "),
CURSOR_PARAMETER("CURSOR-PARAMETER "),
CURSOR_LEER("CURSOR-LEER ");
private final String str;
FehlerBewertungAktionEnum(String str) { this.str = str;}
public String toString(){ return str; }
}
和aktionTxt的数据库值
|CURSOR_LEER | (20 chars)
当getter返回|CURSOR_LEER |
时,为什么它会在我的selectOneMenu中显示NEK0-NEK0(枚举的第一个元素)而不是CURSOR_LEER?我调试了jsf页面,发现没有<option>
具有selected
属性。
奇怪的是,我可以使用相同的jsf代码创建一个新元素,它会将我的新对象正确保存到数据库中。我很确定此处无法使用trim()
,因为我无法保存fb
对象。
答案 0 :(得分:1)
NEK0-NEK0
,因为它是列表中的第一个,并且没有任何项可以通过#{fb.aktionTxt}
的值进行匹配。您可以添加一个默认项目,在这种情况下将选择该项目。
<h:selectOneMenu value="#{fb.aktionTxt}">
<f:selectItem itemLabel="Select one..."/>
<f:selectItems value="#{myBean.FBAEnum}" />
</h:selectOneMenu>
如果#{fb.aktionTxt}
解析为(其类型为)FehlerBewertungAktionEnum
,则应该有效。但是,如果它是String
,则列表中的值不会等于它,因为Enum
与String
进行比较,导致第一个项目被选中。在这种情况下,如果#{fb.aktionTxt}
为String
,您可以尝试<f:selectItems>
<f:selectItems value="#{myBean.FBAEnum}" var="myEnum" itemLabel="#{myEnum.toString()}" itemValue="#{myEnum.toString()}"/>
答案 1 :(得分:0)
哦 - 我的 - 上帝
数据库值为|CURSOR_LEER |
(20个字符),带有下划线,而我的枚举使用连字符。我怎么可能,我的同事或任何读这篇文章的人都没有看到这么久&gt;。&lt;