2014-10-09 37 views
1

我想获取我的导航的前一个令牌。如何获取GWT中的最后一个历史令牌

对于为例,在这个页面是:

http://www.example.com/com.example.gwt.HistoryExample/HistoryExample.html#page1

我莫名其妙地重定向到这个新的一页:

http://www.example.com/com.example.gwt.HistoryExample/HistoryExample.html#page2

现在,如果我想在当前的道理,我可以很容易地得到它:

String currentPlace = placeManager.getCurrentPlaceRequest()。getNameToken() ;

currentPlace将获得“第2页”,但我想不出如何让前面的标识,这是“第1页”

回答

0

您可以在onModuleLoad()方法或成是在你的应用程序,当然和创建之初后来还是不破坏

private Place previousPlace; 
private Place currentPlace; 

eventBus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() { 

     public void onPlaceChange(PlaceChangeEvent event) { 

      previousPlace = currentPlace; 
      currentPlace = event.getNewPlace(); 
     } 
    }); 
添加类,例如验证码
0

我不知道为什么第1页重定向到第2页的应用程序问题,但在这里不用。我扩展了场所控制器,以便我可以做一个goBackOr(放置场所)。这将让你得到先前的地方。你可以调用getPreviousPlace()。这可能是处理地点导航的有用方法,当您有编辑活动并且您想要返回到用户来自的前一个地方时。您应该能够使用这个位置控制器进行替换,而不用至少进行测试。

public class PlaceController extends com.google.gwt.place.shared.PlaceController { 

    private static final Logger log = Logger.getLogger(PlaceController.class.getName()); 

    private final EventBus eventBus; 

    private final Delegate delegate; 

    private Place where = Place.NOWHERE; 

    /** 
    * Previous place from history. 
    */ 
    private Place previousPlace = null; 

    /** 
    * Legacy method tied to the old location for {@link EventBus}. 
    * 
    * @deprecated use {@link #PlaceController(EventBus)} 
    */ 
    @Deprecated 
    public PlaceController(com.google.gwt.event.shared.EventBus eventBus) { 
     this((EventBus) eventBus); 
    } 

    /** 
    * Legacy method tied to the old location for {@link EventBus}. 
    * 
    * @deprecated use {@link #PlaceController(EventBus, Delegate)} 
    */ 
    @Deprecated 
    public PlaceController(com.google.gwt.event.shared.EventBus eventBus, Delegate delegate) { 
     this((EventBus) eventBus, delegate); 
    } 

    /** 
    * Create a new PlaceController with a {@link DefaultDelegate}. The 
    * DefaultDelegate is created via a call to GWT.create(), so an alternative 
    * default implementation can be provided through <replace-with> rules 
    * in a {@code .gwt.xml} file. 
    * 
    * @param eventBus 
    *   the {@link EventBus} 
    */ 
    public PlaceController(EventBus eventBus) { 
     this(eventBus, (Delegate) GWT.create(DefaultDelegate.class)); 
    } 

    /** 
    * Create a new PlaceController. 
    * 
    * @param eventBus 
    *   the {@link EventBus} 
    * @param delegate 
    *   the {@link Delegate} in charge of Window-related events 
    */ 
    public PlaceController(EventBus eventBus, Delegate delegate) { 
     super(eventBus, delegate); 
     this.eventBus = eventBus; 
     this.delegate = delegate; 
     delegate.addWindowClosingHandler(new ClosingHandler() { 
      public void onWindowClosing(ClosingEvent event) { 
       String warning = maybeGoTo(Place.NOWHERE); 
       if (warning != null) { 
        event.setMessage(warning); 
       } 
      } 
     }); 
    } 

    /** 
    * Get the previous place, if null then this is the first place. 
    * 
    * @return a {@link Place} instance 
    */ 
    public Place getPreviousPlace() { 
     return previousPlace; 
    } 

    /** 
    * Returns the current place. 
    * 
    * @return a {@link Place} instance 
    */ 
    public Place getWhere() { 
     return where; 
    } 

    /** 
    * Request a change to a new place. It is not a given that we'll actually 
    * get there. First a {@link PlaceChangeRequestEvent} will be posted to the 
    * event bus. If any receivers post a warning message to that event, it will 
    * be presented to the user via {@link Delegate#confirm(String)} (which is 
    * typically a call to {@link Window#confirm(String)}). If she cancels, the 
    * current location will not change. Otherwise, the location changes and a 
    * {@link PlaceChangeEvent} is posted announcing the new place. 
    * 
    * @param newPlace 
    *   a {@link Place} instance 
    *    
    */ 
    public void goTo(Place newPlace) { 
     log().fine("goTo: " + newPlace); 

     // if (getWhere().equals(newPlace)) { 
     // log().fine("Asked to return to the same place: " + newPlace); 
     // return; 
     // } 

     String warning = maybeGoTo(newPlace); 
     if (warning == null || delegate.confirm(warning)) { 
      previousPlace = where; 
      where = newPlace; 
      eventBus.fireEvent(new PlaceChangeEvent(newPlace)); 
     } 
    } 

    /** 
    * This is useful for going back unless there is, 
    * not a previous place, commonly when a user refreshes 
    * the screen and then tries to click back. 
    * @param place Place to go if there is not a previous place set. 
    */ 
    public void goBackOr(Place place) { 
     Place previousPlace = getPreviousPlace(); 

     if (previousPlace != null && previousPlace != Place.NOWHERE) { 
      goTo(previousPlace); 
     } else if (place != null) { 
      goTo(place); 
     } else { 
      throw new RuntimeException("Previous place was null and the optional place was not specified"); 
     } 

    } 

    /** 
    * Visible for testing. 
    */ 
    private Logger log() { 
     return log; 
    } 

    private String maybeGoTo(Place newPlace) { 
     PlaceChangeRequestEvent willChange = new PlaceChangeRequestEvent(newPlace); 
     eventBus.fireEvent(willChange); 
     String warning = willChange.getWarning(); 
     return warning; 
    } 

}