2014-07-16 34 views
0

我有兩個演示者:DevicePresenter和ContainerPresenter。我把一個PlaceRequest在DevicePresenter調用,像這樣的一些參數ContainerPresenter:我有這個重寫的方法試圖正確使用PlaceRequest

PlaceRequest request = new PlaceRequest.Builder() 
         .nameToken("containersPage") 
         .with("action","editContainer") 
         .with("containerEditId", selectedContainerDto.getUuid().toString()) 
         .build(); 
placeManager.revealPlace(request); 

在我ContainersPresenter:

@Override 
public void prepareFromRequest(PlaceRequest placeRequest) { 
    Log.debug("prepareFromRequest in ContainersPresenter"); 
    super.prepareFromRequest(placeRequest); 

    String actionString = placeRequest.getParameter("action", ""); 
    String id; 
    //TODO: Should we change that to really retrieve the object from the server? Or should we introduce a model that keeps all values and inject that into all presenters? 
    if (actionString.equals("editContainer")) { 
     try { 
      id = placeRequest.getParameter("id", null); 
      for(ContainerDto cont : containerList) { 
       Log.debug("Compare " + id + " with " + cont.getUuid()); 
       if(id.equals(cont.getUuid())) { 
        containerDialog.setCurrentContainerDTO(new ContainerDto()); 
        addToPopupSlot(containerDialog); 
        break; 
       } 
      } 
     } catch (NumberFormatException e) { 
      Log.debug("id cannot be retrieved from URL"); 
     } 
    } 
} 

但當revealPlace被調用時,在該網址瀏覽器保持不變,並顯示默認演示者(主頁)。 當我打印的要求,這似乎是罰款:

PlaceRequest(nameToken=containersPage, params={action=editContainer, containerEditId=8fa5f730-fe0f-11e3-a3ac-0800200c9a66}) 

而且我NameTokens是這樣的:

public class NameTokens { 
    public static final String homePage = "!homePage"; 
    public static final String containersPage = "!containersPage"; 
    public static final String devicesPage = "!devicesPage"; 

    public static String getHomePage() { 
     return homePage; 
    } 

    public static String getDevicesPage() { 
     return devicesPage; 
    } 

    public static String getContainersPage() { 
     return containersPage; 
    } 

} 

我錯過了什麼?謝謝!

回答

0

在您的原始代碼中,構建PlaceRequest時,您忘記了'!'在你的名字開頭。

.nameToken("containersPage") 

,而你的NameTokens項

public static final String containersPage = "!containersPage"; 

正如你指出的,引用NameTokens常量是不易這種簡單的錯誤之作!

0

有時問題存在於「耳朵之間」。如果我避開字符串,但使用來自NameTokens正確的符號一樣

  PlaceRequest request = new PlaceRequest.Builder() 
        .nameToken(NameTokens.containersPage) 
        .with("action","editContainer") 
        .with("containerEditId", selectedContainerDto.getUuid().toString()) 
        .build(); 

它工作得很好。抱歉!