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

Jsf valueChangeListener在提交时调用,而不更改selectOneMenu中的选项,jsf,selectonemenu,valuechangelistener,Jsf,Selectonemenu,Valuechangelistener,在我的页面中,我有selectonemenu,我注意到当我单击datatable的分页时,valueChangeListener方法被调用,而没有实际更改selectonemenu中的值或选项 这是如何发生的,我如何防止这种情况发生,因为只有当用户更改selectonemenu中的值时,我才需要调用valueChangeListener方法 谢谢你的帮助 问候 这是我的selectonemenu代码 更新1 <ice:selectOneMenu value="#{list.selected

在我的页面中,我有selectonemenu,我注意到当我单击datatable的分页时,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 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;
    }
public List getSelectItems(){
if(selectItems==null){
装载物品;
}
返回选定的项目;
}

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

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

this.selectedItem = "1";

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

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

this.selectedItem = "1";

请发布代码。没有它就很难诊断请发布代码。没有它就很难诊断感谢很多有用的BALUC。那么这是在构造函数中初始化相同值的最佳实践还是存在其他更好的方法?我还有一个疑问,我可以在提交时看到值,初始值是相同的。当页面加载之前当我开始使用分页导航时,下拉列表是1,当我单击分页时,提交的值也是1。那么valueChangeListener是如何调用的呢?但就像我初始化时提到的那样。selectedItem=“1”;然后valueChangeListener不会被调用。对这种行为有点困惑。毕竟,你到底需要
valueChangeListener
方法做什么?你似乎对值更改不感兴趣,但只对提交的值感兴趣。因此,你也可以在bean的操作方法中完成所需的工作。我使用valueChangeListener,用于在用户更改selectonemenu中的选项时刷新datatable。最初datatable使用默认值加载,该值与selectonemenu中的初始值相同。您也可以在分页的操作方法中获取当前选定的值。非常感谢您的帮助。这是初始化的最佳实践吗构造函数或其他更好的方法中存在相同的值?我还有一个疑问,我在提交时可以看到值和初始值相同。当我开始使用分页导航之前加载页面时,下拉列表为1,当我单击分页时,提交的值也为1。那么valueChangeListener是如何调用的?但与您一样当我使用此选项初始化时,将显示ned。选择EdItem=“1”;然后valueChangeListener不会被调用。对这种行为有点困惑。毕竟,你到底需要
valueChangeListener
方法做什么?你似乎对值更改不感兴趣,但只对提交的值感兴趣。因此,你也可以在bean的操作方法中完成所需的工作。我使用valueChangeListener,用于在用户更改selectonemenu中的选项时刷新datatable。最初datatable加载默认值,该值与selectonemenu中的初始值相同。您也可以在分页方法的操作中获取当前选定的值。