GWTP尝试显示错误位置无效,但随后正常工作

时间:2015-04-01 13:44:36

标签: gwt gwtp gwt-platform

我设置了几个地方,并且它们正常工作,除非由此问题引起延迟。他们使用嵌套的演示者。 对于一个地方,似乎任何重复尝试加载它会导致无限循环显示错误/未经授权的地方(不明白为什么,没有看门人设置),但然后正确加载页面。我遇到的问题是它导致的延迟和不必要的日志垃圾邮件 - 它正确地加载了页面,为什么它不能在没有首先通过循环的情况下执行它?有人有什么想法吗?

- 更新 -

我正在使用GWTP 1.4和GWT 2.7.0,但该项目最初是使用GWTP 0.6或更早版本创建的。我们已升级后更新了弃用等,但我知道还有不合时宜的事项。
我尝试使用默认设置切换出我的ClientPlaceManager,将ErrorPlace和UnauthorizedPlace绑定到我们的主页,并删除了它的网守,但它仍然试图转到错误位置(覆盖了revealErrorPlace方法并注意到它抛出了错误对于已经在该会话中至少加载过一次的有效令牌。特别是一个页面,没有任何演示者生命周期阶段正在触发,虽然演示者是可见的(我认为只在firefox中打破)。我真的不喜欢理解它。

- 更新2 -

我已经删除了看门人(甚至指定了@NoGatekeeper),确保错误/未经授权的地方有@NoGatekeeper并且存在,并覆盖revealPlace(request,updateUrl)输出结果,并添加了try / catch - 它完全一样。无限循环,但一切都可以访问。我的调试输出甚至显示它试图揭示错误的位置,但它永远不会,只是错误输出。 这无非是令人沮丧的。

堆栈跟踪:

SEVERE: Exception caught: Encountered repeated errors resulting in an infinite 
loop. Make sure all users have access to the pages revealed by revealErrorPlace 
and revealUnauthorizedPlace. (Note that the default implementations call 
revealDefaultPlace)
com.google.gwt.event.shared.UmbrellaException: Exception caught: 
Encountered repeated errors resulting in an infinite loop. Make sure all users 
have access to the pages revealed by revealErrorPlace and 
revealUnauthorizedPlace. (Note that the default implementations call 
revealDefaultPlace)
    at Unknown.fillInStackTrace_0_g$(student-0.js@36:10580)
    at Unknown.Throwable_3_g$(student-0.js@8:10535)
    at Unknown.Exception_3_g$(student-0.js@18:10678)
    at Unknown.RuntimeException_3_g$(student-0.js@18:61481)
    at Unknown.UmbrellaException_3_g$(student-0.js@25:133542)
    at Unknown.UmbrellaException_5_g$(student-0.js@26:133603)
    at Unknown.fireEvent_7_g$(student-0.js@13:133134)
    at Unknown.fireEvent_12_g$(student-0.js@22:154354)
    at Unknown.fire_8_g$(student-0.js@17:132936)
    at Unknown.fireValueChangedEvent_0_g$(student-0.js@3:154358)
    at Unknown.onHashChanged_0_g$(student-0.js@29:154297)
    at Unknown.apply_0_g$(student-0.js@28:109006)
    at Unknown.entry0_0_g$(student-0.js@16:109062)
    at Unknown.anonymous(student-0.js@14:109042)
Caused by: java.lang.RuntimeException: Encountered repeated errors resulting in 
an infinite loop. Make sure all users have access to the pages revealed by 
revealErrorPlace and revealUnauthorizedPlace. (Note that the default 
implementations call revealDefaultPlace)
    at Unknown.fillInStackTrace_0_g$(student-0.js@36:10580)
    at Unknown.Throwable_2_g$(student-0.js@8:10526)
    at Unknown.Exception_2_g$(student-0.js@18:10672)
    at Unknown.RuntimeException_2_g$(student-0.js@18:61475)
    at Unknown.startError_0_g$(student-0.js@11:92009)
    at Unknown.error_2_g$(student-0.js@8:91772)
    at Unknown.doRevealPlace_0_g$(student-0.js@10:91762)
    at Unknown.revealPlace_1_g$(student-0.js@8:91921)
    at Unknown.revealPlace_0_g$(student-0.js@8:91908)
    at Unknown.revealErrorPlace_1_g$(student-0.js@8:92109)
    at Unknown.error_2_g$(student-0.js@8:91773)
    at Unknown.doRevealPlace_0_g$(student-0.js@10:91762)
    at Unknown.handleTokenChange_0_g$(student-0.js@12:91848)
    at Unknown.onValueChange_4_g$(student-0.js@8:91888)
    at Unknown.dispatch_87_g$(student-0.js@16:132968)
    at Unknown.dispatch_88_g$(student-0.js@8:132972)
    at Unknown.dispatch_0_g$(student-0.js@8:49973)
    at Unknown.dispatchEvent_2_g$(student-0.js@14:133006)
    at Unknown.doFire_0_g$(student-0.js@9:133250)
    at Unknown.fireEvent_8_g$(student-0.js@8:133323)
    at Unknown.fireEvent_7_g$(student-0.js@25:133128)
    at Unknown.fireEvent_12_g$(student-0.js@22:154354)
    at Unknown.fire_8_g$(student-0.js@17:132936)
    at Unknown.fireValueChangedEvent_0_g$(student-0.js@3:154358)
    at Unknown.onHashChanged_0_g$(student-0.js@29:154297)
    at Unknown.apply_0_g$(student-0.js@28:109006)
    at Unknown.entry0_0_g$(student-0.js@16:109062)
    at Unknown.anonymous(student-0.js@14:109042)

1 个答案:

答案 0 :(得分:2)

如果您使用的是DefaultPlaceManager,请确保已将DefaultPlace,ErrorPlace和UnauthorizedPlace绑定到Gin模块中的Presenter名称标记。 从DefaultPlaceManager的javadoc(http://arcbees.github.io/GWTP/javadoc/apidocs/com/gwtplatform/mvp/client/proxy/DefaultPlaceManager.html):

  

重要!如果您使用此类,请不要忘记绑定DefaultPlace,   ErrorPlace和UnauthorizedPlace到您的杜松子酒中的Presenter名称标记   模块。

     

注意:没有显示默认,错误和未经授权的地方   更新浏览器的URL(因此传入的是false值)   revealPlace)。这将避免步入无限导航   如果用户向后导航(使用浏览器的后退按钮),则循环播放。

     

以下是我们要避免的无限导航循环示例:

     

未经身份验证的命中#admin(保留给经过身份验证的地方)   管理员)显示#unauthorized的地方,浏览器的URL是   更新为#unauthorized用户单击他的后退按钮   浏览器,登陆#admin,然后#unauthorized,然后#admin,依此类推。

此外,来自https://github.com/ArcBees/GWTP/issues/296

  

验证Presenter中代理的接口是否继承   ProxyPlace。