Gwt 我们能不能就让“我”去做;prepareFromRequest“;要像传统的非Ajax页面一样工作?
好的,让我们看看传统的非Ajax页面是如何工作的。假设您有一个类似下面链接的页面Gwt 我们能不能就让“我”去做;prepareFromRequest“;要像传统的非Ajax页面一样工作?,gwt,gwtp,Gwt,Gwtp,好的,让我们看看传统的非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#!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
初始化页面“search”,然后调用prepareFromRequest
,它将转到服务器获取数据
那很好,没问题。但是,如果我们使用revealPlace
打开一个新页面(如客户页面),那么我们点击后退按钮,它将返回到“搜索”页面&它将再次调用prepareFromRequest
。然后,prepareFromRequest
将再次对服务器进行完全相同的调用。这是不好的,因为它浪费资源
因此,我希望仅在初始化页面时调用“prepareFromRequest”(在onBind之后运行),并阻止所有其他页面请求中的“prepareFromRequest”(例如,用户按下后退按钮)
这意味着“prepareFromRequest”应该像上面提到的传统非Ajax页面一样工作
我们能做到吗?或
您有更好的解决方案吗?如果您已经有特定搜索词的搜索结果,并且只有在后端发生更改时才向后端发出调用,那么为什么不签入您的
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);
}
}
}
公共演示者扩展。。。。{
字符串searchItem=null;
列表搜索结果=null;
@凌驾
public void prepareFromRequest(PlaceRequest PlaceRequest){
super.prepareFromRequest(placeRequest);
String item=placeRequest.getParameter(“item”,null));
如果(searchItem==null | |!searchItem.equals(item)){
searchItem=项目;
//调用后端并将数据存储在字段中。
searchResult=从_服务器获取_(searchItem);
}
}
}
等等,假设我们搜索了searchItem=“car”,但如果用户输入url“abc.com#search;searchTearm=bicycle”,那么我们需要对该请求进行新的搜索。如果我喜欢你,那么系统不会调用“searchTerm=bicycle”也许我可以检查两个请求是否完全相同,但是你知道检查两个请求是否完全相同的最简单方法吗(参数的数量相同&nametoken相同。当然会。如果(seachItem==null | | |!searchitem.equals(item))line将在您之前未搜索或搜索词与前一个不同时发出新的后端调用