我已经设置了这个设置,您可以打开一个弹出窗口,选择多个项目,并为每个项目显示一个微调器,允许您定义项目数量。 也可以有多个这样的弹出窗口。我使用以下设置:
view.xhtml:
...
<ui:repeat id="iter">
<p:dialog id="dPopUp" widgetVar="#{str.index}">
<ui:decorate template="/views/popup.xhtml" />
</p:dialog>
</ui:repeat>
<p:commandButton value="SELECT" type="button" onclick="PF(#{str.index}).show(); setCurrentList(#{str.index});" />
...
popup.xhtml:
...
<p:dataTable id="popupList" rowIndexVar="rowIndex">
<p:column>
<p:spinner id="spinIt" value="#{uiBean.currentList.get(rowIndex).spinnerValue}"/>
</p:column>
</p:dataTable>
...
整个功能就像一个弹出窗口的魅力一样,但只要您在弹出窗口中保存数据并打开另一个弹出窗口并尝试添加项目,就会获得java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
。为什么在打开新弹出窗口时,在setCurrentList方法之前调用currentList的getter,但是新打开的弹出窗口没有spinners,因为还没有选择任何东西。所以我猜测这是异常的原因,因为列表最初是空的。如果在所选弹出窗口中没有微调器的情况下,当我尝试选择项目时,为什么它甚至会调用getter?在打开第一个弹出窗口时它不会这样做。
基本设置方案: