reRender определенный ряд rich: dataTable - PullRequest
3 голосов
/ 29 августа 2011

Доброе утро!

Можно ли переопределить только 1 конкретную строку rich: dataTable?

У меня есть rich: dataTable, и когда я делаю что-то, что, я уверен, изменилась только 1 строка, мне нужно перечитать только эту строку, а не всю таблицу. Является ли это возможным? Как?

XHTML:

<rich:dataTable id="myTable"  value="#{bean.table}" var="me">
    <rich:column>
        <h:outputText value="#{me.id}" />
    </rich:column>
    <rich:column>
        <h:outputText value="#{me.valueOne}" />
    </rich:column>
    <rich:column>
        <h:outputText value="#{me.valueTwo}" />
    </rich:column>
</rich:dataTable>

<some:tag.... reRender="??????" action="bean.example" />

Java:
public void example{
   // Do something that affects to the row selected
}

ОГРОМНОЕ СПАСИБО.

1 Ответ

3 голосов
/ 29 августа 2011

Да, это возможно. Вы должны указать следующие вещи:

  • Какие столбцы будут отображаться с помощью атрибута reRender тегов, которые могут вызывать метод MBean
  • Какие строки будут отображаться с помощью атрибута ajaxKeys rich:dataTable.

Атрибут ajaxKeys связан с Set <Integer> Объектом, который содержит номера строк, подлежащих обновлению.

Например, предположим, что вы хотите вызвать метод Mbean с помощью a4j:commandButton и хотите визуализировать определенную строку и столбец после завершения действия. Вы можете использовать следующее:

<a4j:commandButton action="#{bean.someAction}"  reRender="columnID,columnID2">
    <f:setPropertyActionListener value="#{idx}" target="#{bean.selectedRow}" />
</a4j:commandButton>

 <rich:dataTable id="myTable"  value="#{bean.table}" var="me" ajaxKeys="#{bean.rowsToUpdate}" rowKeyVar="idx">
        <rich:column id="columnID">
            <h:outputText value="#{me.id}" />
        </rich:column>
        <rich:column id="columnID2">
            <h:outputText value="#{me.valueOne}" />
        </rich:column>
        <rich:column>
            <h:outputText value="#{me.valueTwo}" />
        </rich:column>
    </rich:dataTable>

Внутри bean.someAction() вы добавляете номер строки, которую хотите обновить, к целому набору rowsToUpdate:

HashSet<Integer> rows = new HashSet<Integer>();
rows.add(selectedRow);
setRowsToUpdate( rows );
...