01 January 2012

Desplegar automáticamente el detailStamp de una af:table después de un insert

Asumiendo que estamos mostrando los datos de la tabla Country en una tabla de ADF Faces, y que cada registro tiene un detalle donde por ejemplo se administran sus provincias, que se debe desplegar automáticamente cada vez que se inserta un nuevo país, la vista quedaría de la siguiente forma:
...
<af:table value="#{bindings.CountryView2.collectionModel}"
var="row" rows="#{bindings.CountryView2.rangeSize}"
selectedRowKeys="#{bindings.CountryView2.collectionModel.selectedRow}"
selectionListener="#{bindings.CountryView2.collectionModel.makeCurrent}"
partialTriggers="::ctbAddCountry ::ctbDelCountry"
rowSelection="single" id="t5"
rowDisclosureListener="#{CrudsBean.disclosureListenerCountry}"
binding="#{CrudsBean.CountryTable}"
>
...

En el backing bean deberíamos tener una propiedad del tipo RichTable el cual es enlazado desde la vista(#{CrudsBean.CountryTable}) y la acción que se invoca para añadir un registro en la colección que muestra la tabla(ctbAddCountryAction), el código final sería algo como por ejemplo:
...
RichTable CountryTable;

public void setCountryTable(RichTable empTable) {
this.CountryTable = empTable;
}

public RichTable getCountryTable() {
return CountryTable;
}

public String ctbAddCountryAction() {
String ret = ejecutaBinding("CreateInsert", false);
Row selectedRow = (Row)EL.get("#{bindings.CountryView2Iterator.currentRow}");
RowKeySet rks = getCountryTable().getDisclosedRowKeys();
List keyList = Collections.singletonList(selectedRow.getKey());
rks.add(keyList);

return ret;
}
..

Después de esto cada vez que añada un registro en la colección que muestra la tabla (Countries), esta desplegará el detailStamp del registro activo.


Enlaces relacionados:

Getting all selected rows in ADF Table with multiple rows selection enabled

ADF UI - selectionListener example for single-select af:table

- FIN -

No comments: