2014-11-24 75 views
0

鑑於這種selectOneMenu用於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) 

爲什麼它在我的selectOneMenu中顯示NEK0-NEK0(枚舉的第一個元素)而不是CURSOR_LEER,當getter返回|CURSOR_LEER |?我調試了jsf頁面,發現沒有<option>具有selected屬性。

奇怪的是,我可以使用相同的jsf代碼創建一個新元素,它會將我的新對象正確保存到數據庫中。我很確定這裏沒有辦法使用trim(),因爲此後我無法保存我的fb對象。

回答

0

噢 - 我 - 神

數據庫值|CURSOR_LEER |(20個字符)與強調,而我的枚舉使用連字符。我,我的同事或任何讀這篇文章的人怎麼也看不到這麼久>。 <

+0

之內的空間這樣的錯誤難以發現,特別是如果還有其他幾個更明顯的嫌疑人:) – 2014-11-27 11:12:40

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,那麼列表中的值不會等於它,因爲EnumString相比較,導致第一個項目被選中。在這種情況下,如果#{fb.aktionTxt}String,你可以嘗試一下本作<f:selectItems>

<f:selectItems value="#{myBean.FBAEnum}" var="myEnum" itemLabel="#{myEnum.toString()}" itemValue="#{myEnum.toString()}"/> 
+0

由於數據庫將只包含那些有效的「字符串」,因此不需要缺省值。您的解決方案對我來說似乎很合理,但不起作用;同樣的效果:(btw,aktionTxt是一個java.lang.String – dasLort 2014-11-24 16:59:27

+0

@dasLort你可以將它設置爲標籤,只是爲了檢查值是否傳遞正確'itemLabel =「#{myEnum.toString()} ==#{fb。 aktionTxt}「'?另外,檢查客戶端和服務器日誌,看看是否有什麼相關的東西 – 2014-11-24 17:42:56

+0

抱歉沒有響應,生病了。當我在標籤的末尾添加一個'Q'時,輸出將是'NEK0-NEK0 == CURSOR_LEER Q'。我想,有一些自動修正在這裏 – dasLort 2014-11-27 09:56:06