首页 > 解决方案 > 为什么 h:selectOneMenu onchange 被触发了两次,为什么 valueChangeListener 在没有 onchange 的情况下不会被触发?

问题描述

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

几周以来我一直在使用 JSF 和 Xnet(可能是 2 或 3 周),我有两个关于 h:selectOneMenu 的问题。

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

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

这是我的 jsp 上的 h:selectOneMenu

<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>

这是bean中的valueChangeListener调用的方法

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

我是JSF的初学者,所以有很多东西我不太了解,这就是为什么我不知道这是否正常。

标签: jsfjsf-1.2selectonemenuvaluechangelistener

解决方案


推荐阅读