在primefaces中刷新后,动态2D arrayList表不起作用?

时间:2015-06-11 13:50:01

标签: jsf jsf-2 primefaces xhtml jsf-2.2

我正在使用prime-faces 5和jsf,我已经基于Tester和Date创建了动态2D arraylist表,第一次使用date显示正确的值。但是下一次它会在单行显示不同的测试者名称。

enter image description here

上面显示第一行正确显示测试者名称,但第二行和第三行显示不同的值。但我想在每个行级别显示相同的测试人员名称。

MY XHTML:

<div align="left" class="width100">
            <div class="DTHeader">
                <h:form id="frmres">
                    <h:panelGrid columns="2"
                        style="padding-top:35px;padding-left:30px;">

                        <h:outputText class="lighttxt1" value="Schedule Date" />
                        <p:calendar id="button" value="#{schedulerbean.sch.scheDate}"
                            styleClass="cal schdate" label="Schedule Date" showOn="button"
                            pattern="dd/MM/yyyy HH:mm" showButtonPanel="true"
                            required="true">

                        </p:calendar>


                        <h:outputText value="TCU Goal" class="lighttxt1" />
                        <h:panelGrid columns="1" >

                        <p:inputText id="tcu" label="The Value given in TCU is"
                            style="border: 1px solid #A8A8A8 !important;background: transparent !important;"
                            styleClass="txtbig" value="#{schedulerbean.sch.tcu}"
                            keypadOnly="true" required="#{tcselectionbean.mancnt} != 0}" />


                    <h:outputText value="(Total Tcu:#{schedulerbean.tottalTCU})" class="lighttxt1" />

                        </h:panelGrid>  



                        <h:outputText value="Select Squad" styleClass="txtblack14" />


                        <p:selectOneMenu value="#{schedulerbean.sch.squadparam}"
                            panelStyleClass="panel" styleClass="DTDD ddwidth1">

                            <f:selectItem itemLabel="All Tester" itemValue=""
                                styleClass="txtblack14" />
                            <f:selectItems value="#{schedulerbean.squadLst}" var="squadval"
                                itemLabel="#{squadval}" itemValue="#{squadval}"
                                styleClass="txtblack14" />
                        </p:selectOneMenu>
                    </h:panelGrid>

                   <h:panelGrid columns="1">
                    <p:commandButton
                        actionListener="#{schedulerbean.resourcePlanWithPossibleEnddate}"
                        value="Calculate" styleClass="blubtn" 
                        update=":frmres:reservtable" />
                    <h:panelGroup id="reservtable">
                        <table class="bor bortd" style="margin-left:32px;">
                            <thead>
                                <tr>
                                    <th>Tester Name / Dates</th>

                                    <c:forEach var="resdate" items="#{schedulerbean.resDateList}">
                                        <th>#{resdate}</th>
                                    </c:forEach>
                                </tr>
                            </thead>

                            <c:forEach var="reserv" items="#{schedulerbean.resList}">
                                <tr>


                                    <td>                

                        <h:selectBooleanCheckbox value="#{schedulerbean.testerCheckboxmap[reserv.testerName]}"
                            styleClass="lighttxt1" />#{reserv.testerName}</td>

                                    <c:forEach var="resdate1" items="#{schedulerbean.resDateList}">
                                        <td class='c#{reserv.reserveType.get(resdate1)}'>
                                    #{reserv.testerName}        #{reserv.tcuMap.get(resdate1)}</td>
                                    </c:forEach>
                                </tr>

                            </c:forEach>
                        </table>
                    </h:panelGroup></h:panelGrid>




                        <p:commandLink styleClass="bluelinknew"
                            action="#{schedulerbean.setSchedulestep('step3')}"
                            update=":schmenufrm" value="Next" style="float:right;"
                            onclick="javascript:changets('schedule');" />





                </h:form>


            </div>
        </div>

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

您滥用forEach JSTL标记。该标记仅在构建组件树时有效,并且不会为回发和AJAX请求重新构建组件树。

bwright建议使用<p:dataTable>是好的,但如果您不想呈现HTML表格,也可以使用<ui:repeat>

  

http://www.ninthavenue.com.au/jsf-c-foreach-vs-ui-repeat

     

了解JSF中JSTL标记最重要的是   他们不代表组件,永远不会成为其中的一部分   构建视图后的组件树。相反,它们是标签   实际上负责在第一个树中构建树   地点。一旦他们完成了工作,他们就会过期,不再停止   等等等。

     

...

     

视图何时构建?

     

现在您已了解标记处理程序仅在有效时才有效   树是建的,下一个逻辑问题应该是好的,什么时候是树   建?

     

简短的回答是为每个请求构建一个新视图   不是回发。在回发期间,视图将从中重建   保存状态。相当令人困惑,而且我知道并不是很明显,但那里   你有它。

     

...

     

删除或添加项目后,我的列表不会更改大小

     

当您构建视图时,您只有5个项目。如果你发回来   在此视图中添加或删除项目,您的视图仍然有5个   h:自从保存状态恢复后,其中的outputText组件。   在这个简单的例子中,你应该使用ui:repeat和你的树   总是包含一个h:ouputText组件,它被迭代   不同的$ {item}值。

     

如果依靠使用c:forEach动态包含不同的表单   你可能遇到困难的组件。总是试着想一想   生成的树看起来像什么,并记住它不会改变   回发。

另见