Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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中使用用户搜索查询进行书签_Gwt - Fatal编程技术网

如何在GWT中使用用户搜索查询进行书签

如何在GWT中使用用户搜索查询进行书签,gwt,Gwt,我是GWT的新手,但我做了足够的搜索来理解我可以使用历史机制在GWT中做书签 但是,当我需要将书签应用于用户搜索查询时,我仍然很困惑如何做书签。 e、 g.主页可能有几个选项卡(我可以在这里使用历史记录机制将选项卡标记为书签)。 用户导航到特定选项卡并执行某些搜索查询后。现在,如果他希望将这个搜索结果URL添加到书签中,我如何使用GWT实现这一点 我尝试过一些选项:GWT超链接小部件、锚、UrlBuilder 但我真的不确定哪一个最方便 您也可以使用历史记录机制来存储搜索查询。您的url可能如下

我是GWT的新手,但我做了足够的搜索来理解我可以使用历史机制在GWT中做书签

但是,当我需要将书签应用于用户搜索查询时,我仍然很困惑如何做书签。 e、 g.主页可能有几个选项卡(我可以在这里使用历史记录机制将选项卡标记为书签)。 用户导航到特定选项卡并执行某些搜索查询后。现在,如果他希望将这个搜索结果URL添加到书签中,我如何使用GWT实现这一点

我尝试过一些选项:GWT超链接小部件、锚、UrlBuilder 但我真的不确定哪一个最方便


您也可以使用历史记录机制来存储搜索查询。您的url可能如下所示:

  http://host.html#tab=<tabname>;search=<query>
http://host.html#tab=;搜寻=

如果使用小部件,历史记录将自动更新

您应该阅读有关GWT历史记录的文档

作为您案例的一个示例,假设您希望记住用户在哪个选项卡上(参数t)以及用户搜索了哪个查询(参数q)。您将在url中输入类似的内容

t=2&q=hello 然后,当您的GWT模块加载时。检查url以查看这些参数是否在此处。如果是,则解析它们以加载正确的选项卡并进行搜索。如果没有,则从头开始加载。示例理论代码:

private int selectedTab;
private String query;
 
public void onModuleLoad() {
    String token = History.getToken();
    if (!Strings.isNullOrEmpty(token)) {
        // parse the history token
        String t = token.substring(2,3);
        String q = token.substring(6, token.length());
        int tabIndex = Integer.valueOf(t);
        setSelectedTab(tabIndex);
        search(q);
    } else {
        // init from scratch
        setSelectedTab(0);
    }

    // Add a listener to your tab panel, to change the History token everytime the
       tab changes
    tabPanel.addSelectionHandler(new SelectionHandler<Integer>(){
        public void onSelection(SelectionEvent<Integer> event) {
             selectedTab = event.getSelectedItem();
             setSelectedTab(selectedTab);
             changeHistoryToken();
        }});        

    // Add listeners for your search query stuff
}

private void changeHistoryToken() {
    History.newItem("t=" + selectedTab + "&q=" + query);
}

private void setSelectedTab(int index) {
    // Set the selected tab
}
private int selectedTab;
私有字符串查询;
moduleload()上的公共void{
字符串标记=History.getToken();
如果(!Strings.isNullOrEmpty(令牌)){
//解析历史标记
字符串t=令牌子字符串(2,3);
字符串q=token.substring(6,token.length());
int-tabIndex=Integer.valueOf(t);
设置选定选项卡(选项卡索引);
搜索(q);
}否则{
//从头开始
设置选定的选项卡(0);
}
//将侦听器添加到选项卡面板中,以便每次更改历史标记
选项卡更改
tabPanel.addSelectionHandler(新的SelectionHandler(){
选举时公共无效(SelectionEvent事件){
selectedTab=event.getSelectedItem();
设置selectedTab(selectedTab);
changeHistoryToken();
}});        
//为搜索查询内容添加侦听器
}
私有void changeHistoryToken(){
History.newItem(“t=“+selectedTab+”&q=“+query”);
}
私有void setSelectedTab(整数索引){
//设置所选选项卡
}
关键是,每次应用程序的状态更改时,您都会向历史记录中添加一个新项。此项是表示应用程序状态的字符串。然后,在加载应用程序时,检查此令牌是否在这里。如果是,则通过解析令牌并设置正确的值(选定选项卡、搜索查询等)来初始化应用程序。如果没有历史标记,则使用默认值初始化

不要忘记通过将此iframe添加到页面来启用历史记录支持:

 <iframe src="javascript:''"
      id="__gwt_historyFrame"
      style="width:0;height:0;border:0"></iframe>


感谢jonasr的及时回复。。。。我已经尝试过上面的方法,唯一的区别是我必须从不同的地方添加历史标记,因为我的查询不是从我选择选项卡的同一页面进行的。因此,我的选项卡导航是通过一个位置控制器完成的,我的搜索方法需要一个RPC调用,而我没有这个实例。有没有办法破解PlaceController中的默认方法,让它们解释我们的令牌。我得到了正确的URL。。。我可以导航到正确的选项卡。。。但我无法在该选项卡页面上启动搜索查询,因为它由占位符机制控制,并且我无法调用搜索服务。