好的,让我们看看传统的非Ajax页面是如何工作的。假设您有一个类似以下链接的页面
abc.com#!search;item=car
在传统的非Ajax网站中,当您第一次拨打" abc.com#!search;item=car
"时,它将转到服务器并获取数据。之后,您将转到其他页面,例如" abc.com#!customer;name=tom
"然后你按回按钮它会回到" abc.com#!search;item=car
"。但是,这次它不会再次打电话给服务器,因为它记得它以前做过的。
现在这是GWTP问题。假设上面的abc.com
是用GWTP技术构建的。
当用户第一次进入" abc.com#!search;item=car
"时,GWTP应用程序将初始化页面"搜索"通过onBind
,prepareFromRequest
将被调用&它会去服务器获取数据。
那很好,没问题。但是,如果我们使用revealPlace
打开一个新页面(如客户页面),那么我们点击后退按钮它将返回"搜索"页面&它会再次拨打prepareFromRequest
。然后prepareFromRequest
将再次对服务器进行完全相同的调用。这不好浪费资源。
所以我想要" prepareFromRequest"仅在我们初始化页面时调用(在onBind之后运行)&阻止" prepareFromRequest"在所有其他页面请求中(例如用户按下后退按钮)。
意思是" prepareFromRequest"应该像上面提到的传统的非Ajax页面一样工作。
我们可以这样做吗?或
你有更好的解决方案吗?
答案 0 :(得分:1)
如果您已经拥有该特定搜索字词的搜索结果,并且只有在后端发出更改后才发出呼叫,那么为什么不办理prepareFromRequest
方法?
这样的事情:
public Presenter extends .... {
String searchItem = null;
List<DTO> searchResult = null;
@Override
public void prepareFromRequest(PlaceRequest placeRequest) {
super.prepareFromRequest(placeRequest);
String item = placeRequest.getParameter("item",null));
if (searchItem == null || !searchItem.equals(item)) {
searchItem = item;
// MAKE A CALL TO THE BACKEND AND STORE THE DATA IN A FIELD.
searchResult = GET_FROM_SERVER(searchItem);
}
}
}