2012-10-22 29 views
0

在下面的代碼中,我在第4行注入了PlaceManager,並試圖在最後一行使用placeManager.revealPlace()。然而,那一刻我得到一個空例外。GWT:注入的PlaceManager爲空

此外,如果我在該行之前添加if(placeManager==null){ Window.alert("Hello"); },則會顯示警報。

任何想法爲什麼會發生這種情況?也許是因爲它在FieldUpdater處理程序中執行?

THANKS

public class CellTableManager { 

private final DialectiveRequestFactory requestFactory = GWT.create(DialectiveRequestFactory.class); 
private EventBus eventBus; 
@Inject PlaceManager placeManager; 

public CellTableManager (final CellTable<Diagram> cellTable, SimplePager pager) { 
    DiagramDatabase.get().getDiagramProvider().addDataDisplay(cellTable); 
    ListHandler<Diagram> sortHandler = new ListHandler<Diagram>(
     DiagramDatabase.get().getDiagramProvider().getList()); 
    cellTable.addColumnSortHandler(sortHandler); 
    this.eventBus = new SimpleEventBus(); 
    requestFactory.initialize(eventBus); 
    SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); 
    pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); 
    pager.setDisplay(cellTable); 

    final SelectionModel<Diagram> selectionModel = initSelectionMode(cellTable); 

    initTableColumns(cellTable, selectionModel, sortHandler); 

    DiagramRequest diagramRequest = requestFactory.diagramRequest(); 
    diagramRequest.listAll().fire(new Receiver<List<DiagramProxy>>() { 
     public void onSuccess(List<DiagramProxy> response) { 
      for (int i=0;i<response.size();i++) { 
       insertEmptyRow(cellTable, response.get(i)); 
      } 
     } 
    }); 
} 

private void initTableColumns(final CellTable<Diagram> cellTable, 
      final SelectionModel<Diagram> selectionModel, ListHandler<Diagram> sortHandler) { 
     Column<Diagram, String> titleColumn = new Column<Diagram, String>(
      new TextCell()) { 
      @Override 
      public String getValue(Diagram object) { 
      return object.getTitle(); 
      } 
     }; 
     titleColumn.setSortable(true); 
     sortHandler.setComparator(titleColumn, new Comparator<Diagram>() { 
      @Override 
      public int compare(Diagram o1, Diagram o2) { 
       return o1.getTitle().compareTo(o2.getTitle()); 
      } 
     }); 

     cellTable.addColumn(titleColumn, BasicConstants.editTableText[0]); 
     cellTable.setColumnWidth(titleColumn, 20, Unit.PCT); 

     Column<Diagram, String> descriptionColumn = new Column<Diagram, String>(
      new TextCell()) { 
      @Override 
      public String getValue(Diagram object) { 
      return object.getDescription(); 
      } 
     }; 

     descriptionColumn.setSortable(true); 
     sortHandler.setComparator(descriptionColumn, new Comparator<Diagram>() { 
      @Override 
      public int compare(Diagram o1, Diagram o2) { 
       return o1.getDescription().compareTo(o2.getDescription()); 
      } 
     }); 

     cellTable.addColumn(descriptionColumn, BasicConstants.editTableText[1], ""); 
     cellTable.setColumnWidth(descriptionColumn, 50, Unit.PCT); 

     Column<Diagram, String> editColumn = new Column<Diagram, String>(
       new ButtonCell()) { 
       @Override 
       public String getValue(Diagram object) { 
       return "edit"; 
       } 
      }; 

     cellTable.addColumn(editColumn, ""); 
     editColumn.setFieldUpdater(new FieldUpdater<Diagram, String>() { 
       @Override 
       public void update(int index, Diagram object, String value) { 
        String diagramCode = object.getDiagramId(); 
        ClientState.setCurrentDiagramId(diagramCode); 
        PlaceRequest request = new PlaceRequest(NameTokens.e).with("id", diagramCode); 
        placeManager.revealPlace(request); 
       } 
     }); 
} 
+3

你如何創建'CellTableManager'?你不叫'新',對吧? –

回答

2

你有沒有bind(...)PlaceManager來實現你的ClientModule(我們可以看到後者?)

你檢查並驗證GinModules/Ginjector(假設你使用gin)?

乾杯,