Ответ 1
Я нашел наиболее универсальную командную последовательность
void start() {
// Either get p
context1.get(..).to( new Receiver<P> { onSuccess(P resp){p = resp;} ... }).fire();
// OR create p
p = context2.create( P.class );
// Then save p
req = context2.persist(p).to( new Receiver<P>{ /* note do not use context1 */
onViolation(...) { /*JSR 303 handler*/ };
onFailure( error ) { /* handle */ error.getMessage() };
onSuccess(X x) { /* whatever persist() returns handler */ }; } );
// drive editor with p
driver.edit( p, req);
}
....
void onSave() {
// editor
ctxt = driver.flush() /* note ctxt == context2 */
if ( driver.hasErrors() ) { /*JSR 303 handler*/};
// RF
ctxt.fire();
}
На основе отрывка беседы ниже http://groups.google.com/group/google-web-toolkit/browse_thread/thread/da863606b3893132/96956661c53e1064?hl=en
Томас Бройер onFailure должен содержать getMessage() исключение, которое вы выбрали на сервере боковая сторона.
Вы можете настроить его, предоставив свои собственные ИсключениеHandler к RequestFactoryServlet (расширьте его и используйте его конструктор, ExceptionHandler).
onViolation будет вызываться только если ваши объекты не проходят JSR-303 BeanПроверка, которая проверяется до вызов любого сервисного метода.
Если вы хотите "поймать" сбой в коде clidnt, вы должны добавить получателя для persist():
context.persist(p).to(новый приемник...