在使用Vaadin显示属性之前更改视图中的属性

时间:2014-07-18 09:31:51

标签: java view vaadin navigator

我使用Vaadin 7.我想在进入之前更改视图中的属性。当我点击第一个视图中的链接时,它会将我重定向到第二个视图,其中包含URL中的参数,如下所示:

<myDomain>:<myport>/vaadinApp/#!SecondView/?id=myid

现在我做的是以下内容:

SecondView second = new SecondView();
getNavigator().addView(SecondView.NAME, second);

我在变更视图中添加了一个监听器:

getNavigator().addViewChangeListener(new ViewChangeListener() {

  private Map<String, String> queryMap;

  @Override
  public boolean beforeViewChange(ViewChangeEvent event) {

    //here I get my parameter (its working)
    if (!event.getParameters().equals("")) {
      queryMap = getQueryMap(event.getParameters().replace("?", ""));
    }

    String newViewName = event.getViewName();

    if(newViewName.equals(SecondView.NAME)){

      System.out.println("In Second VIEW : ");
      if (queryMap != null && !queryMap.get("id").equals("")) {
        System.out.println("IF FOUND !! => " + queryMap.get("id"));

        second.setId(queryMap.get("id"));
        System.out.println("SET =>" + second.getId());
      }
    }
    ....

现在当我运行我的应用程序时,在控制台中我得到了这个:

IF FOUND !! => activiti$4077
SET =>activiti$4077
ID : null

这意味着我得到了参数,我在View中更改了它,但是当它显示视图时我得到id = null,这意味着它实际上没有改变任何东西。我的代码有什么问题吗?救命啊!

1 个答案:

答案 0 :(得分:0)

您的参数中很可能出现问号导致问题。尝试删除它(并相应地更新参数处理)/vaadinApp/#!SecondView/?id=myid - &gt; /vaadinApp/#!SecondView/id=myid

?与查询字符串参数一起使用,但在这种情况下参数只是URI片段的一部分。