2014-04-28 10 views
0

我正在使用GWTP,我发现这个问题。点击网页浏览器的“返回”和“前进”按钮时GWTP应用程序的怪异行为?

我在CustPresenter验证码:

private List<String> dataList=new List<String>(); 
@Ovvrride 
public onBind(){ 
    myTextBox.setText("Test"); 
    dataList.add("test"); 
} 

好了,现在第一次打开的页面,该页面显示的文本字符串具有“文本” & DataList控件具有“测试”值。在该页面上,我点击了Web浏览器的“返回”和“前进”按钮(如Chrome或IE)。点击“返回”后,会显示前一页。当点击“前进”时,它会显示客户页面&我仍然在客户页面的文本框中看到字符串“文本”,但dataList没有“测试”值?

发生了什么事?

这是GWTP的错误还是我做错了什么?

注:我使用GWT 2.50去年版本

+0

很少有错别字在代码中的伴侣:你不能叫'新名单()'因为它是一个接口('新的ArrayList()'代替),并标注应该是'@ Override' :) – slugmandrew

回答

1

onBind()方法只调用一次,当你第一次实例演示。所以它会根据您的需要填充TextBoxdataList

然后,当您再次点击并继续前进时,您所看到的是第一次致电onBind()View。按下前进不会再运行onBind(),因此您可能会以某种方式重新实例化ArrayList,然后不填充它,因为onBind()已被调用。

试试这个:

@Override 
public onBind(){ 
    private List<String> dataList = new ArrayList<String>(); 
    myTextBox.setText("Test"); 
    dataList.add("test"); 
} 

或者只是改变onBind()onReset()onReveal(),因为每当主持人透露被调用这些方法。

更有知识的人可能想纠正我在这里虽然。

+0

的方式,谷歌设计Presenter生命周期(onBind,onreset ....)会引起很多困惑,因为它不像传统的非Ajax页面。有时候它会调用重置,有时它不会调用,但Google没有明确指出哪个动作(回击?或揭示Place?)使重置被调用?有时我会回拨或转发,并且我们不确定它是如何工作的 – Tum

+0

我认为您对GWT结束和GWTP开始的位置有点困惑。那些生命周期方法('onBind()','onReset()','onReveal()','onHide()')都是GWTP的一部分,它是一个由ArcBees维护的开源项目,不是GWT的一部分本身。你可以阅读更多关于他们(的生命周期方法,他们被称为)这里的GWTP维基:https://github.com/ArcBees/GWTP/wiki/Presenter-Lifecycle – slugmandrew

+1

我注意到你发布了很多问题,在这里,我只想对你说:“继续下去!这很快就会有意义。”这种发展与旧的做事风格截然不同,但一旦你“明白了”,就永远不会回头。 :) – slugmandrew

相关问题