GWT编辑器框架ListEditor

时间:2012-04-20 00:49:37

标签: gwt editor requestfactory

我无法知道为什么这种方法效果不佳。

首先。我的行为是这样的,我会省略代码以尝试更好地解释:

public class ProgramaEditor extends Composite implements Editor<ProgramaProxy> {
  /*edits a ProgramaProxy just fine*/         
  /* a EditorList to edit BitacoraProxy */
  @UiField BitacoraListEditor bitacoras;

 }

    public class BitacoraListEditor extends Composite implements IsEditor<ListEditor<BitacoraProxy, BitacoraEditor>>, HasRequestContext<List<BitacoraProxy>>{
 /* edit a list of BitacoraProxy just fine */
 protected class BitacoraEditorSource extends EditorSource<BitacoraEditor>{
      /* the editor source that vends Editors of BitacoraProxy*/
      public BitacoraEditor create(int index) {
              final BitacoraEditor editor = new BitacoraEditor();
                      editor.setIndex(index);

                 /*more code*/

                       editor.addDeleteEditorHanlder(new EditorDeleteHandler() {
                        /* ... handler to remove a Editor from the list */
                        subeditors.getList().remove(event.getIndex());
                       }
      }
  }

 private ListEditor<BitacoraProxy, BitacoraEditor> subeditors = ListEditor.of(new BitacoraEditorSource());
 }

在服务器端:

 @Entity
 public class Bitacora extends EntityBase {
     @NotNull(message="La fecha no puede ser nulo")
     private Date fecha;    
 }

所以一切正常工作流程编辑ProgramaProxy然后添加BitacoraProxys然后保存,我可以使用ListEditor保存ProgramaProxy及其@OneToMany BitacoraProxy。

问题是当我从编辑器列表中删除BitacoraProxy时使用:

  subeditors.getList().remove(event.getIndex());
   /*Please note the  @NotNull on the Many side on the property fecha.*/

当我保存整个对象时,我发现constrait违反了该属性:

  @NotNull(message="La fecha no puede ser nulo")
  private Date fecha;

为什么呢?我只是调试了我的代码和ListEditor它的同步意思是:

Add a BitacoraProxy -> ListEditor.getList() - size = 1
Then I remove a BitacoraProxy from the ListEditor.getList() - size = 0 

ListEditor getList()上没有BitacoraProxy,然后是Save按钮:

 driver.flush().fire(new Receiver<Void>() {
            @Override
            public void onSuccess(Void response) {

            }
            @Override
            public void onConstraintViolation(Set<ConstraintViolation<?>> violations) {
                DialogHandler handler = DialogHandler.getInstance();
                ErrorDialog errDlg = handler.createErrorDialog();               

                for(ConstraintViolation<?> violation:violations){
                    errDlg.addDetail(violation.getMessage());
                }
                /* more code */
        });

为什么我在ListEditor.getList()上不存在对Proxys的约束违规。

任何帮助都会被贬低。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的BitacoraProxyedit()(至少由编辑框架),因此它是RequestContext的一部分,并将被发送到服务器(仅限ID,除非你改变了它的一些属性),因此将被验证,无论它是否会在以后使用。

这是一个已知问题(1),但它是RequestFactory原始设计的一部分,所以我不确定如何真正修复它。另请参阅issue 5926


(1)在http://gwt-code-reviews.appspot.com/1601806/diff/9001/user/src/com/google/web/bindery/requestfactory/shared/impl/AbstractRequestContext.java#newcode1182

看到TODO