extendedDataTable上的行渲染不起作用

时间:2013-11-15 08:53:53

标签: jsf-2 datatable richfaces row

问题(简​​短版)

我遇到富表面问题(4.3.2-final) 我正在尝试重新渲染rich:extendedDataTable中的行/单元格。我无法让它发挥作用。 唯一有效的是重新整理整个表格。

我能找到的所有示例/教程都适用于3.3版本。那些解决方案对我不起作用。

我希望你能帮助我解决方案或4.2+示例/教程。


问题的长版本

extendedDataTable 未选择的行细胞:

<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.xexample (rich 3.3)

没有成功

如果您有任何可能的解决方案,请告诉我。


我的错误已修复。错误不是渲染。但渲染的条件设置在渲染的组件之外。这导致重新渲染没有更新值的组件,这导致屏幕上没有变化。

经验教训:如果您有渲染条件,请确保条件值在重新渲染的组件内。


1 个答案:

答案 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。