p:selectOneMenu предварительно выбирает предыдущий элемент, когда присутствует элемент noSelectionOption

Возникла проблема с выбором p:selectOneMenu при добавлении f:selectItem.

Вид:

<p:selectOneMenu value="#{selectionTest.selectedName}">
    <f:selectItem itemLabel="Select" noSelectionOption="true" />
    <f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" />
</p:selectOneMenu>

Модель:

private List<String> allNames;
private String selectedName;

public MenuSelectionTestBean(){
    allNames = new ArrayList<String>();
    allNames.add("Ahmed");
    allNames.add("Mohamed");
    allNames.add("Ibrahim");
    allNames.add("Walid");

    selectedName ="Walid";
}

Результат:

введите здесь описание изображения

Должен быть выбран пункт «Валид», однако вместо него выбран «Ибрагим». Я думаю, что PrimeFaces выбирает элемент в зависимости от его индекса в списке, а не значения элемента.

Чем это вызвано и как я могу это решить?


person ehab refaat    schedule 01.01.2013    source источник


Ответы (1)


Я мог бы воспроизвести вашу проблему. Я посмотрел исходный код PrimeFaces. Это ошибка в PrimeFaces SelectOneMenuRenderer, которая проявляется только тогда, когда используется элемент с noSelectionOption="true". Модуль рендеринга не будет генерировать для этого HTML-элемент <option> вспомогательного элемента <select>, но для этого он сгенерирует <li> визуального <ul> списка. Другими словами, <select> содержит в вашем случае 4 элемента, а <ul> 5 элементов. <li> выбирается JavaScript на основе индекса <option selected>, как вы и подозревали. Это объясняет вашу проблему.

Лучше всего сообщить об ошибке ребятам из PrimeFaces. Средство визуализации также должно сгенерировать для этого <option>, или JavaScript должен выбрать параметр на основе значения, а не индекса.

Между тем, замена noSelectionOption="true" на itemValue="#{null}" или также itemValue="", когда JSF настроен на интерпретацию представленных значений пустой строки как null, должна решить вашу проблему.

person BalusC    schedule 02.01.2013
comment
это действительно проблема code.google.com/p/primefaces/issues/ я нашел его после публикации этой проблемы; спасибо - person ehab refaat; 02.01.2013