我有一个新编码的GWT / GAE应用,该应用在客户端上使用RequestFactory和Editors,在背面使用自定义的Objectify DAO服务。
flush()然后persist()路径在成功时可以正常工作。客户端JSR 303也可以正常工作。
我的问题是如何触发服务器警告/错误并处理UI更新?
我在http://turbomanage.wordpress.com/2010/02/09/generic-dao-for- objectify-2/使用Chandler的Generic DAO for Objectify 2
我的gwt活动正在调用persist(myProxy).fire(new Receiver <>)
我的dao代码针对业务逻辑情况(例如“找到重复的电子邮件地址- 想要登录?”)抛出IllegalArgumentException和其他RuntimeExceptions。
Receiver <>。onSuccess()可以很好地跟踪成功的结果。Receiver <>。onFailure()和Receiver <>。onViolation()均不会报告RuntimeExceptions。
(更正:针对服务器端异常正在调用onFailure())
有一个更好的方法吗?DAO应该抛出哪些异常,以便onViolation()或onFailure()报告错误?编辑者应如何处理异常并从异常中恢复?
我发现最通用的命令序列是
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=zh- CN
Thomas Broyer onFailure应该包含您在服务器端抛出的异常的getMessage()。 您可以通过向RequestFactoryServlet提供自己的ExceptionHandler来对其进行调整(扩展它并使用其带有ExceptionHandler的构造函数)。 仅当您的实体未通过JSR-303 Bean验证时才调用onViolation,该验证在调用任何服务方法之前进行检查。 如果要“捕获”故障代码中的故障,则必须为persist()服务方法添加一个Receiver: context.persist(p).to(new Receiver…
Thomas Broyer onFailure应该包含您在服务器端抛出的异常的getMessage()。
您可以通过向RequestFactoryServlet提供自己的ExceptionHandler来对其进行调整(扩展它并使用其带有ExceptionHandler的构造函数)。
仅当您的实体未通过JSR-303 Bean验证时才调用onViolation,该验证在调用任何服务方法之前进行检查。
如果要“捕获”故障代码中的故障,则必须为persist()服务方法添加一个Receiver: context.persist(p).to(new Receiver…