如何处理GWT应用中的超时请求? 这是我的web.xml文件的剪辑:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
我的GWT项目基于MVP活动和地点。 每当用户等待超过30mn时,我想显示一个弹出窗口并将用户重定向到登录页面。这就是我的所作所为 所有RPC服务:
public void onFailure(Throwable caught) {
...
if (caught instanceof InvocationException) {
{
Window.alert("Time out de session. Veuillez vous reconnecter. 2");
Window.open(GWT.getHostPageBaseURL() + "identification.html", "_self", null);
return;
}
...}
它有效,但有些事情很烦人: 1)捕获的异常应该是RequestTimeoutException。但它没有被捕获,这就是我使用InvocationException的原因。 怎么没有被抓住? 2)如何以更通用的方式处理此异常?在所有RPC服务中捕获该异常有点愚蠢...... 我读了一些AsyncCallbackAdapter类...... 3)现在我只处理RPC服务但当然超时发生在任何地方:链接,按钮,页面刷新... 我正在使用MVP场所和活动。 有没有办法在用户试图去某个地方时捕获该异常?
感谢您的帮助
答案 0 :(得分:2)
您应该创建自己的已检查异常,例如SessionTimeoutException
,并在您的客户端代码中处理它。 GWT知道如何处理(序列化)已检查的异常并将其传递给您的客户端代码:http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#exceptions
要在应用程序范围内处理此问题,您可以通过为远程服务创建自己的生成器来挂钩RPC机制:How to redirect to login page after session expire in GWT RPC call
最简单的方法(不更改所有现有代码)将设置Timer
以定期检查(每隔几分钟)服务器会话。当会话超时显示模式DialogBox
(阻止其他小部件上的用户输入)通知用户他/她需要再次登录。