在客户端:
factory.find(proxyId).fire(new Receiver<P>()
{
@Override
public void onSuccess( P response )
{
proxy = response;
...
}
@Override
public void onFailure( com.google.web.bindery.requestfactory.shared.ServerFailure error )
{
Window.alert( error.getMessage() );
}
}
在服务器端我使用如下的定位器:
public class myLocator extends Locator<T, String>
{
@Injector LocatorHook hook;
@Override
public T find( Class<? extends T> clazz, String id )
{
T result = ...;
hook.run( result );
return result;
}
....
}
hook.run()
方法可能会抛出RunTimeException("validation exception")
,我希望能抓住它
onFailure()
中客户端的异常,但我确实捕获了异常,但消息是“内部服务器错误”,
不是我在hook.run()
投放的例外:“验证例外”。
让客户端捕获我在服务器端抛出异常的任何想法?
更新用:
正如托马斯所说,验证来自数据存储的新鲜对象很奇怪,但我遇到了一个问题
我不知道如何使用服务方法的情况:
在客户端我获得EntityProxyId
个对象,通过factory.find( proxyId ).fire(...)
我可以获得该实体
从数据存储区,但实体可能不适合用户访问,在这种情况下我需要在服务器端检查它,但我找不到一个合适的地方来做
验证,有关此的任何想法?
答案 0 :(得分:1)
RequestFactory不期望定位器抛出异常。异常只应由服务方法引发,并将定向到客户端的相应Receiver
(附加到投掷的服务方法的那个)。
外部服务方法,唯一被路由到客户端的例外是ReportableException
,只能从ServiceLocatorDecorator
的{{1}}方法抛出。这意味着您可以挂钩自己的report()
来捕获定位器和ServiceLocatorDecorator
的异常。
也就是说,验证来自数据存储的新鲜对象似乎很奇怪。您可能希望提供覆盖report()
的{{1}}(在应用来自客户端的更改后将验证对象)。错误将返回到ServiceLocatorDecorator
的{{1}}中的客户端,而validate()
将解冻,以便您可以进一步编辑代理和{{ 1}}再次。