Jsf p:ui内datatable内的微调器:重复未按预期工作

Jsf p:ui内datatable内的微调器:重复未按预期工作,jsf,primefaces,Jsf,Primefaces,我有这个设置,你可以打开一个弹出窗口,选择多个项目,每个项目都会出现一个微调器,允许你定义项目的数量。 也可以有多个这样的弹出窗口。我使用以下设置: view.xhtml: ... <ui:repeat id="iter"> <p:dialog id="dPopUp" widgetVar="#{str.index}"> <ui:decorate template="/views/popup.xhtml" /> </p:di

我有这个设置,你可以打开一个弹出窗口,选择多个项目,每个项目都会出现一个微调器,允许你定义项目的数量。 也可以有多个这样的弹出窗口。我使用以下设置:

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,但是新打开的弹出窗口没有微调器,因为尚未选择任何内容。所以我猜这就是异常的原因,因为列表原来是空的。如果所选弹出窗口中没有微调器,为什么在我尝试选择项目时它甚至调用getter?它在打开第一个弹出窗口时不会这样做。 基本设置方案: