<pe:fluidGrid> 未在 <p:dataList> 的第二次迭代中更新 var
<pe:fluidGrid> not updating var in second iteration of <p:dataList>
我在 p:dataList
中有一个 pe:fluidGrid
从 hashmap 中读取元素。
我曾经使用 ui:repeat
而不是 p:dataList 但由于这个 post 改变了它: <h:form> within <ui:repeat> not entirely working, only the last <h:form> is processed
我现在的问题是:内部 fluidGrid 没有正确更新它的 var data
。
<p:dataList var="pdi" value="#{FormGenerator.formItems.keySet()}" id="all" varStatus="loop" type="none" >
<p:panel id="panel" header="#{pdi.getFragmentDefinition().getFragmentName()}" style="margin-bottom:1em; width:100%;" >
<pe:fluidGrid id="fluidGrid" value="#{FormGenerator.formItems[pdi]}" var="data"
hGutter="20" vGutter="10" widgetVar="fluidGridWdgt_#{loop.index}" >
#{data.id} #{data.label}
<pe:fluidGridItem type="stringValue" id="txt_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="txt" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:inputText id="txt" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}"/>
</pe:fluidGridItem>
<pe:fluidGridItem type="integerValue" id="int_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="int" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:spinner id="int" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}" />
</pe:fluidGridItem>
<pe:fluidGridItem type="dateValue" id="cal_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="cal" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:calendar id="cal" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}" showOn="button"/>
</pe:fluidGridItem>
</pe:fluidGrid>
</p:panel>
</p:dataList>
屏幕截图中的每个面板都是在 p:dataList 中创建的。如您所见,以红色突出显示,第二个面板从第一个面板的最后一个值开始。第二个面板由于当时发生的索引超出范围异常而未完成(试图访问大小为 2 的列表中的第三个索引)。
显然我所要做的就是改变
#{FormGenerator.formItems[pdi].get(data.id).getData().label}
至
#{FormGenerator.formItems[pdi][data.id].getData().label}
有人知道其中的区别吗?
我在 p:dataList
中有一个 pe:fluidGrid
从 hashmap 中读取元素。
我曾经使用 ui:repeat
而不是 p:dataList 但由于这个 post 改变了它: <h:form> within <ui:repeat> not entirely working, only the last <h:form> is processed
我现在的问题是:内部 fluidGrid 没有正确更新它的 var data
。
<p:dataList var="pdi" value="#{FormGenerator.formItems.keySet()}" id="all" varStatus="loop" type="none" >
<p:panel id="panel" header="#{pdi.getFragmentDefinition().getFragmentName()}" style="margin-bottom:1em; width:100%;" >
<pe:fluidGrid id="fluidGrid" value="#{FormGenerator.formItems[pdi]}" var="data"
hGutter="20" vGutter="10" widgetVar="fluidGridWdgt_#{loop.index}" >
#{data.id} #{data.label}
<pe:fluidGridItem type="stringValue" id="txt_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="txt" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:inputText id="txt" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}"/>
</pe:fluidGridItem>
<pe:fluidGridItem type="integerValue" id="int_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="int" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:spinner id="int" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}" />
</pe:fluidGridItem>
<pe:fluidGridItem type="dateValue" id="cal_">
<div class="dynaFormLabel">
#{data.id}
<p:outputLabel for="cal" value="#{FormGenerator.formItems[pdi].get(data.id).getData().label} _ #{data.id}"/>
</div>
<p:calendar id="cal" value="#{FormGenerator.formItems[pdi].get(data.id).getData().value}" showOn="button"/>
</pe:fluidGridItem>
</pe:fluidGrid>
</p:panel>
</p:dataList>
屏幕截图中的每个面板都是在 p:dataList 中创建的。如您所见,以红色突出显示,第二个面板从第一个面板的最后一个值开始。第二个面板由于当时发生的索引超出范围异常而未完成(试图访问大小为 2 的列表中的第三个索引)。
显然我所要做的就是改变
#{FormGenerator.formItems[pdi].get(data.id).getData().label}
至
#{FormGenerator.formItems[pdi][data.id].getData().label}
有人知道其中的区别吗?