java - 共享除前缀之外的所有地点或如何使用 PlaceHistoryMapperWithFactory

标签 java gwt

在我的 gwt-app 中,我有一些地方共享除前缀之外的所有内容(例如“editUserPlace”和“showUserPlace” - 在这种情况下,状态由 userId 确定) 我当前的尝试是通过“ShowUserPlace”和“EditUserPlace”扩展抽象的“UserPlace”,它们仅在一行中有所不同:@Prefix(“showUser”)/@Prefix(“editUser”) - 必须复制孔标记生成器代码(我无法继承分词器代码,但可以覆盖前缀)。

https://groups.google.com/d/topic/google-web-toolkit/pghMLX27Y4Y/discussion托马斯建议使用“PlaceHistoryMapperWithFactory”,但我坚持使用它。

我是否必须为每个地方/标记器提供一种方法(也为“正常”的地方 - 提供自己的标记器)? 我是否必须将我的 Abstract 和/或扩展类添加到 @WithTokenizer? 我应该如何/在哪里调用 setFactory?

有人使用过 PlaceHistoryMapperWithFactory (可能在类似的用例中)?并给一些建议? 有人遇到同样的问题并以另一种方式解决吗?

最佳答案

该工厂应该可以工作:

class MyFactory {
   @Prefix("showUser")
   public PlaceTokenizer<ShowUserPlace> showUserPlace() {
      return new UserPlaceTokenizer<ShowUserPlace>() {
         protected ShowUserPlace createPlace(String id) {
            return new ShowUserPlace(id);
         }
      };
   }

   @Prefix("showUser")
   public PlaceTokenizer<EditUserPlace> showUserPlace() {
      return new UserPlaceTokenizer<EditUserPlace>() {
         protected EditUserPlace createPlace(String id) {
            return new EditUserPlace(id);
         }
      };
   }
}

abstract class UserPlaceTokenizer<P extends UserPlace> implements PlaceTokenizer<P> {
   public P getPlace(String token) {
      // shared logic between both places: parses ID (or whatever) from token
      return createPlace(id);
   }
   public String getToken(P place) {
      // shared logic between both places: build token out of place
      return token;
   }
   protected abstract P createPlace(String id);
}

当然你也可以注入(inject)某种Provider<P>在标记生成器中,而不是对其进行子类化以覆盖其 createPlace方法。

您可以将其与 @WithTokenizers 一起使用,如果生成器找到完全相同的位置或前缀的两个分词器,则生成器将会阻塞。

您应该调用setFactory就在你之后GWT.create()你的映射器(实际上,重要的是你在调用映射器的 getPlacegetToken 方法之前设置工厂)。

关于java - 共享除前缀之外的所有地点或如何使用 PlaceHistoryMapperWithFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089964/

相关文章:

java - Java 中的泛型继承

java - InheritableThreadLocal 值未被 ExecutorService 线程继承

gwt - GXT 网格复选框标题全选/取消全选

GWT 2.4 DataGrid 选择项目时自动滚动

Java - 内存管理/数据库连接问题

java - 如何让JTextPane水平滚动

java - java 8中的复杂比较器

java - 如何设置与主题颜色不同的 gwt Material 元素的颜色?

java - GWT 中按顺序排列更多空格字符

java - gwt:如何使用setEventListener?