수정 된 연락처를 저장하지 못하도록 유효성 검사를 위해 ContactDocuments가 editor.getList().remove(index)
으로 제거되었다는 것이 문제입니다. 예를 들어 requestContext.save()
은 editor.getList().add()
과 함께 새 ContactDocument를 추가하면 onConstraintViolation과 함께 실패하고 일부 필드에서는 @NotNull 위반으로 인해 즉시 제거됩니다.GWT : ListEditor가 목록에서 제거 된 엔티티의 유효성 검사를 잘못 시도 함
나는 간단한 관계가있다 : 연락처에는 많은 ContactDocuments가있다. 요청 공장 및 편집자 프레임 워크로 Contact를 편집하려고합니다. ContactDocuments는 기본 유효성 검사를 위해 JSR-303으로 주석 처리됩니다.
ContactDocuments 수집에 대한 나의 ListEditor :
public class ContactDocumentListEditor extends Composite implements IsEditor<ListEditor<ContactDocumentProxy, ContactDocumentEditor>>, HasRequestContext<List<ContactDocumentProxy>> {
private RequestContext requestContext;
interface ViewUiBinder extends UiBinder<Widget, ContactDocumentListEditor> {}
private final static ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
private final ListEditor<ContactDocumentProxy, ContactDocumentEditor> editor = ListEditor.of(new DocumentEditorSource());
@UiField
VerticalPanel container;
@UiField
Button addContactDocumentButton;
@UiHandler("addContactDocumentButton")
void addContactDocumentButtonClick(ClickEvent event) {
addNewContactDocument();
}
public ContactDocumentListEditor() {
initWidget(uiBinder.createAndBindUi(this));
}
private class DocumentEditorSource extends EditorSource<ContactDocumentEditor> {
@Override
public ContactDocumentEditor create(final int index) {
final ContactDocumentEditor documentEditor = new ContactDocumentEditor();
documentEditor.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
removeDocumentEditor(index);
}
});
container.insert(documentEditor, index);
return documentEditor;
}
@Override
public void dispose(ContactDocumentEditor subEditor) {
container.remove(subEditor);
}
@Override
public void setIndex(ContactDocumentEditor subEditor, int index) {
container.insert(subEditor, index);
}
}
@Override
public ListEditor<ContactDocumentProxy, ContactDocumentEditor> asEditor() {
return editor;
}
@Override
public void setRequestContext(RequestContext ctx) {
requestContext = ctx;
}
private void addNewContactDocument() {
ContactDocumentProxy newDocument = requestContext.create(ContactDocumentProxy.class);
editor.getList().add(newDocument);
}
private void removeDocumentEditor(int index) {
editor.getList().remove(index);
}
}
내 발표자를 구동하기 :
이내가 그것을 어떻게
final ContactRequestContext contactRequestContext = contactRequestContextProvider.get();
contactRequestContext.save(contact);
driver.edit(contact, contactRequestContext);
driver.flush().fire(new Receiver<Void>() {
@Override
public void onSuccess(Void response) {
// success
}
@Override
public void onConstraintViolation(Set<ConstraintViolation<?>> violations) {
for (ConstraintViolation violation : violations) {
logger.info("Contact constraint violation: " + violation.getPropertyPath() + " = " + violation.getMessage());
}
driver.setConstraintViolations(violations);
}
});
을 를 해결할 수 ?
감사합니다. 당신의 대답은 그 자리에 바로 있습니다. 그러나 나는 또 다른 문제가있다. 나는 나의 프록시 인터페이스를 구현 한 : 공용 클래스 ContactDocumentFakeProxy는 { @Override 공공 EntityProxyId > stableId() { 는 null ContactDocumentProxy을 구현; } } 그러나 editor.getList(). add (새 ContactDocumentFakeProxy())를 사용하여 목록에 추가하면 IllegalArgumentException이 AbstractRequestContext.checkStreamsNotCrossed()에 의해 throw됩니다. 'AutoBeanUtils.getAutoBean (object)'는 내 구현에서 AutoBean을 생성 할 수 없습니다. – user882209
스택 트레이 란 무엇입니까? 예외가 언제 던져 집니까? –
http://pastebin.com/cTDv8AP9 – user882209