воскресенье, 8 декабря 2013 г.

Форма для редактирования с кнопкой Edit

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) " );
            }
    }

Комментариев нет:

Отправить комментарий