问题(简短版)
我遇到富表面问题(4.3.2-final) 我正在尝试重新渲染rich:extendedDataTable中的行/单元格。我无法让它发挥作用。 唯一有效的是重新整理整个表格。
我能找到的所有示例/教程都适用于3.3版本。那些解决方案对我不起作用。
我希望你能帮助我解决方案或4.2+示例/教程。
问题的长版本
未选择的行细胞:
<a4j:outputPanel layout="block" rendered="#{inactive}">
<h:outputText
value="#{cc.attrs.rowItem.getValue(cc.attrs.id)}"
styleClass="outputField"
style="#{cc.attrs.style}">
</h:outputText>
</a4j:outputPanel>
选定的行细胞:
<a4j:outputPanel layout="block" rendered="#{active and field.echoed}">
<h:inputText
value="#{field.value}"
id="#{cc.attrs.id}ID"
disabled="#{field.disabled}"
readonly="#{field.readonly}"
rendered="true"
title="#{field.title}"/>
....
</a4j:outputPanel>
选择其他行时:
<a4j:ajax event="selectionchange"
listener="#{crudBean.actionForm.selectionListener}"
render="messages,saveButton,deleteButton,multiOccurenceTable"
/>
HTML代码,未选中行单元格
<td class="rf-edt-td-j_idt230">
<div class="rf-edt-c rf-edt-c-j_idt230">
<div class="rf-edt-c-cnt">
<div id="multiOccurenceTable:0:soort:soort">
<div id="multiOccurenceTable:0:soort:j_idt140">
<span class=" outputField" style="">VO</span>
</div>
</div>
</div>
</div>
</td>
选定的行格式HTML:
<td class="rf-edt-td-j_idt230">
<div class="rf-edt-c rf-edt-c-j_idt230">
<div class="rf-edt-c-cnt">
<div id="multiOccurenceTable:1:soort:soort">
<div id="multiOccurenceTable:1:soort:j_idt240">
<input id="multiOccurenceTable:1:soort:soortID" name="multiOccurenceTable:1:soort:soortID" value="VO" type="text">
</div>
</div>
</div>
</div>
</td>
我的尝试: on selectionchange rerender现在放在桌子上:“multiOccurenceTable”。 这适用于每个选择更改,整个表被重新渲染。
为了性能,我尝试在行或单元级别更新表。我无法让这个工作。我尝试过简单而复杂的解决方案,但都没有效果。我究竟做错了什么? (大多数示例/教程都适用于互联网上的richfaces 3.3,这可能是一个原因)
尝试1,手动更新行/单元格:
所有3行:当我按下“保存”按钮
时没有任何反应<a4j:commandLink actionListener="#{crudBean.actionForm.save}"
render="multiOccurenceTable:0,multiOccurenceTable:1,multiOccurenceTable:2"
reRender="multiOccurenceTable:0,multiOccurenceTable:1,multiOccurenceTable:2">Save
</a4j:commandLink>
一个单元格:当我按下“save1”按钮
时没有任何反应<a4j:commandLink actionListener="#{crudBean.actionForm.save}"
render="multiOccurenceTable:@rows(crudBean.actionForm.rowsToUpdate):soort"
reRender="multiOccurenceTable:@rows(crudBean.actionForm.rowsToUpdate):soort">Save1
</a4j:commandLink>
我已经尝试使用 ajaxKeys ,根据此tutorial rich 3.x和example (rich 3.3)
没有成功如果您有任何可能的解决方案,请告诉我。
我的错误已修复。错误不是渲染。但渲染的条件设置在渲染的组件之外。这导致重新渲染没有更新值的组件,这导致屏幕上没有变化。
经验教训:如果您有渲染条件,请确保条件值在重新渲染的组件内。
答案 0 :(得分:2)
我对richfaces 4不太熟悉,不知道extendedDatatable的细节。快速搜索让我相信自动渲染行是不,因为行不是组件。
所以你似乎不得不渲染单个细胞。
渲染基于组件的clientId工作。您可以在HTML代码中找到确切的ID。因为它适用于那些clientId,所以需要渲染要渲染的组件。
换句话说,您需要使用具有id的面板包装组件,并且默认情况下呈现:
<h:outputPanel layout="block" id="soortPanel">
<h:outputText
value="#{cc.attrs.rowItem.getValue(cc.attrs.id)}"
rendered="#{inactive}">
</h:outputText>
<h:inputText
value="#{field.value}"
rendered="#{active}"/>
</h:outputPanel>
outputpanel应该获得如下ID: multiOccurenceTable:1:soortPanel ,您应该能够呈现该ID。