簡體   English   中英

selectOneMenu不能顯示正確的值,但是getter會得到它

[英]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則列表中的任何值都不會等於它,因為EnumString進行了比較,從而導致選擇了第一項。 在這種情況下,如果#{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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM