在提交时调用valueChangeListener而不更改selectOneMenu中的选项

时间:2011-02-08 12:10:00

标签: jsf selectonemenu valuechangelistener

在我的页面中,我有selectonemenu,我注意到当我单击datatable的分页时,将调用valueChangeListener方法而不实际更改selectonemenu中的值或选项。

如何发生这种情况以及如何防止这种情况发生,因为我只有在用户更改selectonemenu中的值时才需要调用valueChangeListener方法。

感谢并感谢任何帮助。

此致

这是我的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 个答案:

答案 0 :(得分:4)

JSF valueChangeListener 绝不与客户端事件相关。这是一个服务器端事件,当提交的值与初始值不同时,将调用该事件。

列表的第一项的值为1,因此当用户未更改下拉列表时,提交的值将为1。如果您不希望调用valueChangeListener,则需要确保初始值也等于1。这是#{list.selectedItem}"背后的价值。在bean的构造/初始化期间将其初始化为与第一项相同的值。

this.selectedItem = "1";