1) Добавляем во VO rowstatus
2) Добавляем во VO edit
3) В xxxVOImpl.java вешаем метод для отмены изменений, примерно такой
public void clearAllCache() {
//dont ask
ViewRowSetImpl drsi = super.getDefaultRowSetInternal();
while(drsi.hasNext()) {
Row item = drsi.next();
}
Iterator iter = super.getEntityDef(0).getAllEntityInstancesIterator(this.getDBTransaction());
while(iter.hasNext()) {
EntityImpl entityItem = (EntityImpl) iter.next();
byte status = entityItem.getEntityState();
String s = ((status == EntityImpl.STATUS_MODIFIED) ? " STATUS_MODIFIED" : "")
+ ((status == EntityImpl.STATUS_NEW) ? " STATUS_NEW" : "")
+ ((status == EntityImpl.STATUS_DELETED) ? " STATUS_DELETED" : "")
+ ((status == EntityImpl.STATUS_DEAD) ? " STATUS_DEAD" : "")
+ ((status == EntityImpl.STATUS_INITIALIZED) ? " STATUS_INITIALIZED" : "")
+ ((status == EntityImpl.STATUS_UNMODIFIED) ? " STATUS_UNMODIFIED" : "");
System.err.println(" --- "+ s);
if(status == EntityImpl.STATUS_NEW
|| status == EntityImpl.STATUS_DELETED) {
entityItem.refresh(EntityImpl.REFRESH_REMOVE_NEW_ROWS
| EntityImpl.REFRESH_UNDO_CHANGES);
}
if(status == EntityImpl.STATUS_MODIFIED) {
entityItem.refresh(EntityImpl.REFRESH_WITH_DB_FORGET_CHANGES);
}
getViewObject().clearCache();
}
4) В форму добавляем поле с кнопкой для редактирования
5) На кнопку вешаем PropertyListner To: #{row.bindings.edit.inputValue}
) Свойство таблицы EditMode выставляем - onClickEdit
6) Добавляем на форму кнопку New с таким обработчиком событий:
#{bindings.CreateInsert.execute}. При этом нужно не забыть добавить action CreateInsert в binding!
7) Добавляем кнопку Save с обработчиком вызывающем такой метод:
public void onSave(ActionEvent actionEvent) {
// Add event code here...
//System.out.println("--- onSave");
ViewObject viewObject = getCurrentVO();
RowSetIterator iterator = viewObject.createRowSetIterator(null);
iterator.reset();
while (iterator.hasNext()) {
Row row = iterator.next();
// process the row here
row.setAttribute("edit",false);
}
iterator.closeRowSetIterator();
super.onCommit(actionEvent);
}
8) Добавляем кнопку Undo Changes обработчиком вызывающем такой метод:
public void onRollback(ActionEvent actionEvent) {
((xxxVOImpl)getCurrentVO()).clearAllCache();
getCurrentVO().executeQuery();
if(getUpdComponent()!= null)
AdfFacesContext.getCurrentInstance().addPartialTarget(getUpdComponent());
}
9) Добавляем в xxxVORowImpl.java два метода, которые будут учитывать свойство edit записи:
@Override
public boolean isAttributeUpdateable(int i) {
Boolean ed = this.getedit();
if(ed == null) {
return false;
}
if(ed.equals(true)) {
return super.isAttributeUpdateable(i);
} else {
return false;
}
}
@Override
protected void create(AttributeList attributeList) {
attributeList.setAttribute("edit", true);
super.create(attributeList);
}
------------------------------------------------------------------------------------------------------
Выделяем цветом редактируемые записи
inlineStyle="#{backingBeanScope.backing_ServiceTypesPriceV.cellColor}">
------------------------------------------------------------------------------------------------------
/*
* Управляем доступностью кнопок Edit, Delete
*/
public void tableSelectionListener(SelectionEvent selectionEvent) {
ADFUtil.invokeEL("#{bindings.PV_ViewObj2.collectionModel.makeCurrent}", new Class[] {SelectionEvent.class},
new Object[] { selectionEvent });
// get the selected row , by this you can get any attribute of that row
//Row selectedRow =
// (Row)ADFUtil.evaluateEL("#{bindings."+ iterator_name +".currentRow}"); // get the current selected row
Row selectedRow = this.getCurrentRow();
BigDecimal no = (BigDecimal) selectedRow.getAttribute("StatusId");
if(no.intValue() == 1) {
this.cb5.setDisabled(false);
this.cb2.setDisabled(false);
//System.out.println("--- cb5.setDisabled(false) " );
} else {
//this.cb5.setDisabled(true);
//this.cb2.setDisabled(true);
//System.out.println("--- cb5.setDisabled(true) " );
}
}