0

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

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

感谢并感谢任何帮助。

问候

这是我的 selectonemenu 代码

更新1

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

和豆方法

   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;
    }
4

1 回答 1

4

JSF与客户端事件valueChangeListener没有任何关系。它是一个服务器端事件,当提交的值与初始值不同时将被调用。

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

this.selectedItem = "1";
于 2011-02-08T13:58:11.263 回答