2014-06-10 1 views
0

나는 Vaadin 7을 사용하고 있습니다. 치료가 끝난 후 내 페이지를 이전 페이지로 리디렉션하고 싶습니다. 그 때문에 나는 새 뷰를 호출 한 View가 나중에 다시 리디렉션 될 수 있어야합니다. 여기에 뭔가를 추가해야한다는 것을 알고 있습니다.Vaadin에서 현재보기 이름을 얻는 방법

getNavigator().addViewChangeListener(new ViewChangeListener() { 

    @Override 
    public boolean beforeViewChange(ViewChangeEvent event) { 

    myNewView.REDIRECT_TO = //here is the problem :) 
}  

어떤 생각을 할 수 있습니까?

답변

1

ViewChangeEvent.getOldView() 메서드를 사용하여 View 개체를 검색 할 수 있습니다. 이제 기본적으로 거기에서 뷰의 이름을 얻을 수있는 방법은 없습니다. 왜냐하면 이론적으로 당신은 같은 이름의 View을 여러 이름으로 등록 할 수 있기 때문입니다. 그러나 여기 당신이 무엇을 할 수 있는지, 당신은 각 뷰에 대해 하나의 이름을 가지고 가정 :

은과 같이, 인터페이스, HasName 만들기 :

public interface HasName { 
    String getName(); 
} 

그런 다음 모든 View 클래스에 HasName를 구현합니다. Navigator에보기를 등록 할 때 getName() 메소드를 사용하여 View의 이름을 참조하십시오. 그 후 간단히 ViewChangeListener에서 캐스트를 수행하고 같은 방법으로 이름에 액세스 할 수 있습니다.

getNavigator().addViewChangeListener(new ViewChangeListener() { 
    @Override 
    public boolean beforeViewChange(ViewChangeEvent event) { 
     View oldView = event.getOldView(); 
     if (oldView != null) { 
      String oldViewName = ((HasName) oldView).getName(); 
      // do stuff with oldViewName 
     } 
    } 
} 
+0

이름을 얻으려고 시도 할 때 작동하지 않는데, 'NullPointerException'이 발생했습니다! – deltascience

+0

아, 처음으로 앱을 여는 경우'getOldView()'는'null'을 반환합니다. 내 예제 코드에'null' 체크를 추가했다. – jupenur