我正在使用PrimeFaces 6.2在Web应用程序中解决以下问题-是的,我已阅读this和this和this和that以及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()否。没有例外。在调试器中,两个数组看起来都是相同的。我没主意-感谢您的帮助!
答案 0 :(得分:0)
在Stackoverflow中创建[mcve]是一个好习惯。我认为您遇到的问题与commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated中的#4有关。但是我只能确定您何时显示了[mcve]。请在其中添加范围注释。