Java selectOneMenu不显示正确的值,但getter会获取该值
给定此SelectOne菜单Java selectOneMenu不显示正确的值,但getter会获取该值,java,jsf,enums,Java,Jsf,Enums,给定此SelectOne菜单 <h:selectOneMenu value="#{fb.aktionTxt}"> <f:selectItems value="#{myBean.FBAEnum}" /> </h:selectOneMenu> 此枚举 public enum FehlerBewertungAktionEnum { NEKO_NEKO("NEK0-NEK0 "), CURSOR_PARAMETER("C
<h:selectOneMenu value="#{fb.aktionTxt}">
<f:selectItems value="#{myBean.FBAEnum}" />
</h:selectOneMenu>
此枚举
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页面,发现没有
具有selected
属性
奇怪的是,我可以用相同的jsf代码创建一个新元素,它将正确地将我的新对象保存到DB中。我很确定这里没有办法使用
trim()
,因为我无法保存我的fb
对象 之所以选择NEK0-NEK0
,是因为它是列表中的第一个,并且没有一个项目可以通过值匹配到#{fb.aktionTxt}
。您可以添加一个默认项,在这种情况下将选择该项
<h:selectOneMenu value="#{fb.aktionTxt}">
<f:selectItem itemLabel="Select one..."/>
<f:selectItems value="#{myBean.FBAEnum}" />
</h:selectOneMenu>
哦,天哪
数据库值为
| CURSOR|LEER |
(20个字符),带有下划线,而我的枚举使用连字符。我、我的同事或任何阅读本文的人怎么可能在这么长时间内都看不到这一点>。默认值是不需要的,因为数据库将只包含那些有效的“字符串”。你的解决方案对我来说似乎是合理的,但不起作用;同样的效果:(顺便说一句,aktionTxt是一个java.lang。String@dasLort能否将其设置为label,以检查是否传递了值OKitemLabel=“#{myEnum.toString()}==#{fb.aktionTxt}”
?另外,检查客户端和服务器日志,看看是否有相关的东西抱歉没有响应,他生病了。当我在标签末尾添加一个Q
时,输出将是NEK0-NEK0==CURSOR\u LEER Q
。我想,由于一些未知的原因,这里有一些自动修剪正在进行,一个曾经工作过的耳朵不再工作了我不得不改用你的方法。服务器没有改变,ear没有改变。我们不知道数据库中的值发生了什么变化?像这样的错误很难发现,特别是如果还有其他几个更明显的嫌疑犯:)
<h:selectOneMenu value="#{fb.aktionTxt}">
<f:selectItem itemLabel="Select one..."/>
<f:selectItems value="#{myBean.FBAEnum}" />
</h:selectOneMenu>
<f:selectItems value="#{myBean.FBAEnum}" var="myEnum" itemLabel="#{myEnum.toString()}" itemValue="#{myEnum.toString()}"/>