[英]selectOneMenu does not show the proper value but getter gets it
給定這個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
對象。
NEK0-NEK0
選擇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()}"/>
哦,我的上帝
數據庫值為|CURSOR_LEER |
(20個字符) 下划線,而我的枚舉使用連字符 。 我,我的同事或任何閱讀此書的人都這么長時間都看不到>。<
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.