Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 我们能不能就让“我”去做;prepareFromRequest“;要像传统的非Ajax页面一样工作?_Gwt_Gwtp - Fatal编程技术网

Gwt 我们能不能就让“我”去做;prepareFromRequest“;要像传统的非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问题。假设上

好的,让我们看看传统的非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
初始化页面“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将在您之前未搜索或搜索词与前一个不同时发出新的后端调用