p:selectOneMenu 内未触发更改事件

No change event triggered in p:selectOneMenu

我在使用 PrimeFaces 6.2 的 Web 应用程序中遇到以下问题 - 是的,我也阅读了 this and this and and that and the wiki and took a look into the primefaces showcase

场景: 我有一个 selectOneMenu,它从一个 bean 中获取它的 selectItems:

<p:selectOneMenu id="konfiguration" value="#{tpsManager.selectedKonfig}" > 
    <p:ajax event="change" listener="#{tpsManager.konfigChange}" />
    <f:selectItems value="#{tpsManager.konfigurationen}" /> 
</p:selectOneMenu>​

如果值是通过 bean 中的 getKonfigurationen() 像这样计算的,则当用户选择一个项目并调用 konfigChange() 时会触发更改事件:

ArrayList konfigurationen = new ArrayList<SelectItem>();
SelectItemGroup g1 = new SelectItemGroup("<Auswertungsbasis>");
g1.setSelectItems(new SelectItem[]{ new SelectItem("id Denver", "Denver" ),  new SelectItem("id San Francisco", "San Francisco" )  });
konfigurationen.add(g1);
konfigurationen.add(0, new SelectItem("id new York", "New York" ));
return konfigurationen;

这很好,但遗憾的是我需要在 selectItemGroup 中动态创建 selectItems,因为这些值是由数据库提供的。在以下代码片段中,第三行 returns 一个 selectItem 数组并将其添加到 SelectItemGroup g1。该数组仅包含 selectItem 对象(包含字符串)并且没有空条目。

ArrayList konfigurationen = new ArrayList<SelectItem>();
SelectItemGroup g1 = new SelectItemGroup("<Auswertungsbasis>");
g1.setSelectItems( al.toArray(new SelectItem[al.size()]) );
konfigurationen.add(g1);
konfigurationen.add(0, new SelectItem("id new York", "New York" ));
return konfigurationen;

问题: 如果用户现在选择一个项目 NO 更改事件被触发并且 konfigChange() 被 NOT 调用。没有例外。在调试器中,两个数组看起来相同。我没有想法 - 任何帮助表示赞赏!

在 Whosebug 中创建 [mcve] 是一个很好的做法。我认为您 运行 遇到的问题与 commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated 中的#4 有关。但我只能确定您何时显示 [mcve]。请在其中包含范围注释。