在p:selectOneMenu

时间:2019-03-14 14:48:52

标签: jsf primefaces

我正在使用PrimeFaces 6.2在Web应用程序中解决以下问题-是的,我已阅读thisthisthisthat以及wiki并也研究了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,因为这些值是由数据库提供的。在以下代码段中,第三行返回一个selectItem数组,并将其添加到SelectItemGroup g1中。数组仅包含selectItem-objects(包含Strings),没有空条目。

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;

问题: 如果用户现在选择一个项目,则会触发更改事件,并且调用konfigChange()。没有例外。在调试器中,两个数组看起来都是相同的。我没主意-感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在Stackoverflow中创建[mcve]是一个好习惯。我认为您遇到的问题与commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated中的#4有关。但是我只能确定您何时显示了[mcve]。请在其中添加范围注释。