更改URL以在GWT中触发事件

时间:2010-07-29 15:04:58

标签: gwt

我正在迭代一些数据并根据以下某些条件生成参数化的URL链接:

finishedHTML.append("<a href=\"http://" + domain + "&service=" + allEvents[eventCounter].EventService +"&day="+ offSet+(-1 * i) +"\"><img src=\"/info.jpg\" alt=\"Info\"/>");

我的应用程序的开始在页面加载/刷新时检查URL参数,并根据参数是否存在以及它们是什么来采取一些操作。

但是,我在参数的开头添加了#,因此页面不需要刷新,但现在它不会触发检查URL的函数。

我的问题是当用户点击链接时如何在GWT中触发事件?我是否需要生成GWT控件并链接单击处理程序?是否可以设置在更改URL时触发的事件???

更新: 亚当回答了最初问题的一部分,但我无法在“#”之后得到查询字符串。有没有比下面这个功能更好的方法:

public static String getQueryString() 
 {
     return Window.Location.getQueryString();
 }

换句话说,如果我输入example.com?service=1,我将获得service = 1作为我的查询字符串。如果我输入example.com#?service=1,我会获得查询字符串的空值..

2 个答案:

答案 0 :(得分:9)

使用History.addValueChangeHandler( handler ),并创建一个处理程序来捕获URL更改。

不需要点击处理程序等,只需更改网址中的“哈希”部分即可。

修改

请参阅此代码示例 - 它将解析http://mydomain/my/path#tok1&tok2&tok3

形式的网址
public void onValueChange(ValueChangeEvent<String> event) {
  String hash = event.getValue();
  if ( hash.length() == 0 ) {
    return;
  }
  String[] historyTokens = hash.split("&",0);
  // do stuff according to tokens
}

答案 1 :(得分:4)

(仅响应您的更新) 你试过吗

History.getToken()

获取“#”后的值?