[컴][웹] GWT 에서 Place 의 Tokenizer



PlaceHistoryMapper 사용법


PlaceHistoryMapper 는 token 을 가지고 해당하는 place 를 가져오기 위해 Tokenizer 를 사용한다.

place 를 정의할 때 아래처럼 Tokenizer 를 함께 정의 해 준다.

public class CustomPlace extends MyPlace {

      public CustomPlace(PlaceToken token) {
            this.token = token;
      }

      public static class Tokenizer implements PlaceTokenizer<CustomPlace> {

            @Override
            public String getToken(CustomPlace place) {
                  return place.getToken();
            }

            @Override
            public CustomPlace getPlace(String token) {
                  return new CustomPlace(new PlaceToken(token));
            }
      }
}

이런 Tokenizer 들을 사용하는 PlaceHistoryMapper 를 아래처럼 정의해 주고.


// AppPlaceHistoryMapper.java
@WithTokenizers( {OverviewPlace.Tokenizer.class, ProductOverviewPlace.Tokenizer.class,
        DomainOverviewPlace.Tokenizer.class})
public interface AppPlaceHistoryMapper extends PlaceHistoryMapper {
}

app 을 시작하는 부분에서 만들어주면 된다.

public void onModuleLoad() {
        ...
        AppPlaceHistoryMapper historyMapper= GWT.create(AppPlaceHistoryMapper.class);

Flow


//
// PlaceHistoryHandler
PlaceHistoryHandler.handleHistoryToken(token)
    Place newPlace = null;
    if ("".equals(token)) {
      newPlace = defaultPlace;
    }
    if (newPlace == null) {
      newPlace = mapper.getPlace(token);
    }
    if (newPlace == null) {
      log().warning("Unrecognized history token: " + token);
      newPlace = defaultPlace;
    }
    placeController.goTo(newPlace);

//
// AbstractPlaceHistoryMapper
AbstractPlaceHistoryMapper.getPlace(token)
    ...
    if (colonAt >= 0) {
        initial = token.substring(0, colonAt);
    ...
    PlaceTokenizer<?> tokenizer = getTokenizer(initial);
    if (tokenizer != null) {
      return tokenizer.getPlace(rest);
    }
    return null

//
// CustomPlace
CustomPlace.Tokenizer.getPlace()


댓글 없음:

댓글 쓰기