如何在不触及页面其余部分的情况下更新动态生成的数据表?

时间:2014-12-29 16:43:23

标签: jsf primefaces

我在视图中有一个设置,我在那里动态显示数据表。这发生在p:accordion-Element中,它动态生成标签(因此也是内部的数据表)。

用户现在有可能(好吧,应该......)添加,编辑和删除对象到数据表,从而添加到选项卡所代表的对象。

添加和编辑功能通过对话框工作。成功添加或编辑后,我想更新包含数据的数据表。

如果我更新整个手风琴面板,我会失去对当前标签的关注,这对用户体验非常不利,特别是因为项目的其他子页面总是只更新数据表。

经过一些谷歌搜索后,我发现我无法动态生成JSF组件的ID,这会使整个过程成为几分钟的过程。

当我打开对话框时,我也没有任何可用于“欺骗”并保存在我的支持bean中的索引。

我还发现我可以通过使用JSTL来解决这个问题,但由于允许的语言有限,这是禁止的。

目前的设置如下:

<p:accordionPanel id="academicYearAccordionPanel"
                  value="#{academicYearAndClassController.academicYears}"
                  var="academicYear" multiple="true" dynamic="true" activeIndex="-1"
                  style="width:100%;">

    <p:tab id="academicYear-#{academicYear.academicYear}" title="Jahrgang - #{academicYear.academicYear}">
        <p:outputPanel style="float:right">
            <p:commandButton value="Löschen" icon="ui-icon-close"
                             actionListener="#{academicYearAndClassController.setAcademicYear(academicYear)}"
                             process="@this"
                             oncomplete="PF('wConfirmAcademicYearDelete').show();">
            </p:commandButton>
        </p:outputPanel>
        <p:spacer style="height:50px;" />
        <p:separator />

        <!-- Tabcontent -->
        <p:outputPanel>
            <p:outputPanel style="float:right">
                <p:commandButton value="Hinzufügen" icon="ui-icon-plusthick"
                                 actionListener="#{academicYearAndClassController.setAcademicYear(academicYear)}"
                                 process="@this"
                                 oncomplete="PF('wAddSchoolclassDialog').show();">
                </p:commandButton>
            </p:outputPanel>
            <h:panelGrid columns="2">
                <h:outputText
                    value="Klassen des #{academicYear.academicYear}. Jahrgangs" />
                <p:spacer style="height:50px;" />
            </h:panelGrid>
            <p:dataTable emptyMessage="Keine Klassen vorhanden"
                         id="schoolclassTable"
                         var="schoolclass"
                         selection="#{academicYearAndClassController.schoolclass}"
                         value="#{academicYearAndClassController.getSchoolclasses(academicYear)}"
                         selectionMode="single" rowKey="#{schoolclass.name}"
                         scrollable="true" scrollHeight="500">
                <p:column headerText="Name">
                    <h:outputText value="#{schoolclass.identifier}" />
                </p:column>
                <p:column headerText="Klassenlehrkraft">
                    <h:outputText
                        value="#{schoolclass.teacher.name} (#{schoolclass.teacher.symbol})" />
                </p:column>
                <p:column headerText="Klassenraum">
                    <h:outputText
                        value="#{schoolclass.room.name} (#{schoolclass.room.locationName})" />
                </p:column>
            </p:dataTable>
        </p:outputPanel>
    </p:tab>
</p:accordionPanel>

我想更新ID为schoolclassTable的元素。我怎样才能做到这一点?

0 个答案:

没有答案