2014-11-24 3 views
0

Учитывая этот selectOneMenu кодselectOneMenu не показывает правильное значение, но добытчик получает его

<h:selectOneMenu value="#{fb.aktionTxt}"> 
    <f:selectItems value="#{myBean.FBAEnum}" /> 
</h:selectOneMenu> 

этот компонент

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) 

Почему он отображает NEK0-NEK0 (первый элемент перечисления) вместо CURSOR_LEER в моем selectOneMenu, когда получатель возвращает |CURSOR_LEER |? Я отлаживал страницу jsf и обнаружил, что нет <option> имеет атрибут selected.

Странная вещь также в том, что я могу создать новый элемент с тем же кодом jsf, и он правильно сохранит мой новый объект в БД. Я уверен, что здесь нет способа использовать trim(), так как я не могу сохранить свой объект fb.

ответ

0

Oh - мой - бог

Значения базы данных |CURSOR_LEER | (20 символов) с подчеркивание в то время как мое перечисление использует дефис. Как ни я, ни мой коллега, ни кто-нибудь, кто читал это, не видели этого так долго>. <

+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()}"/> 
+0

по умолчанию не требуется, поскольку БД будет содержать только те действующие «строки». Ваши решения кажутся мне разумными, но не работают; тот же эффект :(btw, aktionTxt - это java.lang.String – dasLort

+0

@dasLort Не могли бы вы установить это как метку, просто чтобы проверить, что значения переданы OK 'itemLabel =" # {myEnum.toString()} == # {fb. aktionTxt} "'? Также проверьте журналы клиентов и серверов, чтобы узнать, есть ли что-то актуальное –

+0

извините за неответу, было плохо. Когда я добавляю 'Q' в конце метки, вывод будет' NEK0-NEK0 == CURSOR_LEER Q'. Думаю, здесь есть некоторая автоматическая отделка – dasLort

Смежные вопросы