2014-07-22 2 views
2

정적 팩토리 스타일 (또는 싱글 톤 패턴)을 사용하여 사용자 정의 Window을 만들고 싶습니다.Vaadin의 정적 팩토리 스타일 (싱글 톤)으로 구성 요소 만들기

public class MyWindow extends CustomComponent { 
private static Window window; 
private static MyWindow instance; 

public static MyWindow getInstance() { 
    if (instance == null) { 
     instance = new MyWindow(); 
    } 
    return instance; 
} 

public void show() { 
    UI.getCurrent().addWindow(window); 
} 

private MyWindow() { 
    CustomLayout layout = new CustomLayout("My HTML Layout"); 
    window = new Window("My Window"); 
    window.center(); 
    window.setWidth("615px"); 
    window.setModal(true); 
    window.setResizable(false); 
    window.setClosable(true); 
    window.setContent(layout); 
} 
} 

그리고 MyWindow.getInstance().show(); 처음 통화는 확인하지만,이 창을 닫은 후이었고 재개하면서, 내 콘솔에서 오류 로그 아래에 도착으로 호출합니다. 그래서

Jul 23, 2014 3:42:39 AM com.vaadin.server.DefaultErrorHandler doDefault 
SEVERE: 
java.lang.IllegalStateException: com.vaadin.ui.Window already has a parent. 
at com.vaadin.ui.AbstractComponent.setParent(AbstractComponent.java:469) 
at com.vaadin.ui.Window.setParent(Window.java:155) 
at com.vaadin.ui.UI.attachWindow(UI.java:501) 
at com.vaadin.ui.UI.addWindow(UI.java:490) 

, 어떻게 static 팩토리 스타일과 방법을 숨기고 Windows을 보여와 Windows을 사용자 정의 사용할 수 있습니까?

+6

Vaadin에 고정 창 (또는 다른 구성 요소)을 생성해서는 안됩니다. 왜냐하면 동일한 인스턴스가 애플리케이션의 모든 사용자들에 의해 공유되고 틀렸기 때문입니다. 싱글 톤 패턴을 제거하기 만하면 문제가 해결됩니다 (응용 프로그램을 여러 사용자로 사용할 때의 문제점). –

답변

4

show() 메소드를 호출 할 때마다 새 Window Object를 만드는 것이 가장 쉬운 방법이라고 생각합니다.

+4

사실상 싱글 톤 패턴 인 문제에 대한 이런 종류의 대답. Vaadin에 싱글 톤 Windows (또는 다른 구성 요소)를 생성해서는 안됩니다. –

0

오류는 귀하의 Window에 이미 상위 항목이 있다고 표시합니다. 그것은 그것을 닫을 때 제거되지 않았 음을 의미합니다. 실제로 이상한 일은 없었습니다. 원하는 경우이 방법을 사용해보십시오.

window.addCloseListener(new CloseListener() { 

    @Override 
    public void windowClose(CloseEvent e) { 
    AbstractSingleComponentContainer.removeFromParent(subwindow); 
    } 
}); 

이렇게하면 문제가 해결됩니다.

+0

네, 저에게 좋습니다. 감사 . 부모로부터 창을 제거하는 경우 BTW, 창 인스턴스가 null이됩니까? – Cataclysm

+1

아니요 창은 계속 표시되지만 표시되지는 않습니다. 이는 사용자 페이지의 컨테이너 내부에 추가되지 않았기 때문입니다. – deltascience

+0

질문에 실제 문제가 싱글 톤 패턴이기 때문에 나는 downvoted. –

관련 문제