Jsf 为什么h:selectOneMenu onchange会被激发两次,为什么valueChangeListener在没有onchange的情况下不会被激发?

Jsf 为什么h:selectOneMenu onchange会被激发两次,为什么valueChangeListener在没有onchange的情况下不会被激发?,jsf,jsf-1.2,selectonemenu,valuechangelistener,Jsf,Jsf 1.2,Selectonemenu,Valuechangelistener,这是我在stackoverflow上的第一篇文章,我希望我做得对 我从几周前(可能2或3周)开始使用JSF和Xnet,我对h有两个问题:selectOneMenu 第一个问题:onchange事件被调用了两次。第一次是当我点击打开下拉列表时,第二次是当我选择一个选项时。我发现它第一次被调用是因为当我打开下拉列表时,所选的值发生了变化,它选择了列表中的第一个值。这是正常行为吗? 第二个问题:如果我没有将onchange。。。再说一次,这是正常的行为吗 我不知道我在哪一个JSF版本上工作,但我知道它

这是我在stackoverflow上的第一篇文章,我希望我做得对

我从几周前(可能2或3周)开始使用JSF和Xnet,我对h有两个问题:selectOneMenu

第一个问题:onchange事件被调用了两次。第一次是当我点击打开下拉列表时,第二次是当我选择一个选项时。我发现它第一次被调用是因为当我打开下拉列表时,所选的值发生了变化,它选择了列表中的第一个值。这是正常行为吗?
第二个问题:如果我没有将onchange。。。再说一次,这是正常的行为吗

我不知道我在哪一个JSF版本上工作,但我知道它在2之前(类似于1.X……这不是我的错,我发誓,这是我公司的错) 这是代码,我不知道它是否有帮助。。。代码不是我的,我正在纠正一个错误

这是我的jsp上的h:SelectOne菜单

<h:panelGrid columns="2">
    <h:selectOneMenu id="id_label" value="#{parentBean.bean.rapportId}"
        immediate="true" onchange="this.form.submit();" valueChangeListener="#{parentBean.refreshDisplay}">
        <f:selectItems id="list_label" value="#{parentBean.labelList}" />
    </h:selectOneMenu>
</h:panelGrid>
我是JSF的初学者,所以有很多事情我不太了解,这就是为什么我不知道这是否正常

此处回答了问题2:此处回答了问题2:
public String refreshDisplay(ValueChangeEvent event) {
    Integer id = (Integer) event.getNewValue();
        ObjectA process = (ObjectA) ObjectA.getInstance();
    try {
        BeanA rBean = (BeanA) process.findById(BeanA.class, new Object[] { id });
        setBean(rBean);
    } catch (MyException e) {
        e.printStackTrace();
        log.error(e, e);
    }
    return "";
}