valueChangeListener вызывается при отправке без изменения параметров в selectOneMenu - PullRequest
0 голосов
/ 08 февраля 2011

На моей странице есть selectonemenu, и я заметил, что когда я нажимаю пагинацию datatable, вызывается метод valueChangeListener без фактического изменения значений или параметров в selectonemenu.

Как это происходит и как я могу предотвратить это, так как мне нужно вызывать метод valueChangeListener, только если пользователь изменяет значения в selectonemenu.

Спасибо и оцените любую помощь.

С уважением

Вот мой код для selectonemenu

Update1

<ice:selectOneMenu value="#{list.selectedItem}"
            partialSubmit="true" valueChangeListener="#{list.val}">
                <f:selectItems value="#{list.selectItems}" />
                </ice:selectOneMenu>

И метод bean

   public void val(ValueChangeEvent event) {
            logger.info("1");
            selectedValue = event.getNewValue().toString();
}

Значениядобавляется как

public void loadItems(){
        selectItems.add(new SelectItem("1", "One"));
        selectItems.add(new SelectItem("2", "Two"));
        selectItems.add(new SelectItem("3", "Three"));
        selectItems.add(new SelectItem("4", "Four")); 

}

И метод вызывается следующим образом

 public List<SelectItem> getSelectItems() {
        if (selectItems == null) {
            loadItems;

        }
        return selectItems;
    }

1 Ответ

4 голосов
/ 08 февраля 2011

JSF valueChangeListener никак не связан с событиями на стороне клиента. Это событие на стороне сервера, которое вызывается, когда значение отправлено отличается от значения начального .

Первый элемент вашего списка имеет значение 1, поэтому, когда пользователь не меняет раскрывающийся список, отправленное значение будет 1. Если вы не хотите, чтобы вызывался valueChangeListener, вам необходимо убедиться, что начальное значение также равно 1. Это значение, стоящее за #{list.selectedItem}". Инициализируйте его тем же значением, что и первый элемент во время создания / инициализации компонента.

this.selectedItem = "1";
...