当使用RequestFactory的stableId()作为状态信息时,可以避免注入Places吗?

时间:2012-08-13 03:56:27

标签: gwt requestfactory gin gwt-places

我的Gin注入的GWT应用程序将RequestFactory与Activities和Places一起使用。

要在Places中标记RequestFactory的stableId(),我会注入RequestFactory。这使班级可以访问getProxyId(token)getHistoryToken(stableId)。 Tokenizer调用非静态的受保护方法来标记特定的Place。

这是一个示例类。

public class StableIdPlace extends Place {

  @Inject private static Provider<StableIdPlace> provider;

  private final MyRequestFactory requestFactory;
  private EntityProxyId<StableIdProxy> stableId;

  @Inject
  public StableIdPlace(MyRequestFactory rf) {
    requestFactory = rf;
  }

  public void setStableId(EntityProxyId<StableIdProxy> which) {
    stableId = which;
  }

  public EntityProxyId<StableIdProxy> getStableId() {
    return stableId;
  }

  protected void setFromHistoryToken(String token) {
    stableId = requestFactory.getProxyId(token);
  }

  protected String getHistoryToken() {
    return requestFactory.getHistoryToken(stableId);
  }

  public static class Tokenizer implements PlaceTokenizer<StableIdPlace> {
    @Override
    public String getToken(StableIdPlace place) {
      return place.getHistoryToken();
    }
    @Override
    public StableIdPlace getPlace(String token) {
      StableIdPlace place = provider.get();
      place.setFromHistoryToken(token);
      return place;
  }
}

该策略要求在需要新地点的地方注入提供商。 不幸的是,这包括静态标记符。

我尝试在Gin客户端模块中使用requestStaticInjection()启动静态注入(对于每个Place类)。我的作品 - 除了历史。我无法让静态Provider初始化。它会在Tokenizer中导致Null异常。

有更好的方法吗?谢谢你的指示。

1 个答案:

答案 0 :(得分:1)

您可以使用PlaceHistoryMapperWithFactory从Ginjector,Provider或AssistedInject工厂创建tokenizer实例。

(我宁愿将RF注入令牌器而不是地点,这个地方是关于代理,关于历史令牌的标记器