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

Jåc*_*cob 1 jsf selectonemenu valuechangelistener

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

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

感谢并感谢任何帮助。

问候

这是我的 selectonemenu 代码

更新1

<ice:selectOneMenu value="#{list.selectedItem}"
            partialSubmit="true" valueChangeListener="#{list.val}">
                <f:selectItems value="#{list.selectItems}" />
                </ice:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

和豆法

   public void val(ValueChangeEvent event) {
            logger.info("1");
            selectedValue = event.getNewValue().toString();
}
Run Code Online (Sandbox Code Playgroud)

值的添加方式如下

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")); 

}
Run Code Online (Sandbox Code Playgroud)

方法调用如下

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

        }
        return selectItems;
    }
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

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

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

this.selectedItem = "1";
Run Code Online (Sandbox Code Playgroud)