我在视图中有一个设置,我在那里动态显示数据表。这发生在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
的元素。我怎样才能做到这一点?