기본 콘텐츠로 건너뛰기
검색
이 블로그 검색
불친절한자수씨
자수씨의 보물창고
페이지
홈
더보기…
공유
공유 링크 만들기
Facebook
X
Pinterest
이메일
기타 앱
태그
Google
11월 23, 2008
[GWT] OpenerEvents
원래 GWT 가 팝업된 윈도우와의 이벤트는 고려를 하지 않고 만들어졌기 때문에 팝업을 주로 사용하는 시스템에서는 팝업 윈도우와 원래 윈도우간의 커뮤니케이션 수단이 필요합니다.
더보기
OpenerCommand.java
package com.idstrust.wiseone.ui.common.client.popup;
public interface OpenerCommand {
void execute();
}
OpenerCommandCollection.java
package com.idstrust.wiseone.ui.common.client.popup;
import java.util.ArrayList;
@SuppressWarnings("serial")
public class OpenerCommandCollection extends ArrayList<OpenerCommand> {
public void fireExecute() {
for (OpenerCommand command : this) {
command.execute();
}
}
}
OpenerEvents.java
package com.idstrust.wiseone.ui.common.client.popup;
import java.util.HashMap;
import java.util.Map;
public class OpenerEvents {
private static Map<String, OpenerCommandCollection> openerCommandsMap;
static {
install();
openerCommandsMap = new HashMap<String, OpenerCommandCollection>();
}
/**
* 팝업창 리스너 핸들러를 초기화합니다.
*/
private native static void install() /*-{
$wnd['__openerEventsHandler'] = function(type) {
@com.idstrust.wiseone.ui.common.client.popup.OpenerEvents::fireExecute(Ljava/lang/String;)(type);
};
}-*/;
/**
* OpenerCommand 를 추가합니다.
* @param type
* @param command
*/
public static void addOpenerCommand(String type, OpenerCommand command) {
OpenerCommandCollection openerCommands = openerCommandsMap.get(type);
if (openerCommands == null) {
openerCommands = new OpenerCommandCollection();
openerCommandsMap.put(type, openerCommands);
}
openerCommands.add(command);
}
/**
* OpenerCommand 를 제거합니다.
* @param type
* @param command
*/
public static void removeOpenerCommand(String type, OpenerCommand command) {
OpenerCommandCollection openerCommands = openerCommandsMap.get(type);
if (openerCommands != null) {
openerCommands.remove(command);
}
}
/**
* OpenerCommand 의 이벤트를 실행시킵니다.
* @param type
*/
protected static void fireExecute(String type) {
OpenerCommandCollection openerCommands = openerCommandsMap.get(type);
if (openerCommands != null) {
openerCommands.fireExecute();
}
}
/**
* 팝업 윈도우에서 부모창의 이벤트를 실행시킵니다.
* @param type
*/
public static native void fireOpenerEvents(String type) /*-{
if ($wnd.opener && $wnd.opener['__openerEventsHandler']) {
$wnd.opener['__openerEventsHandler'](type);
}
}-*/;
}
실제 사용 예...
Opener 윈도우
OpenerEvents.addOpenerCommand("refresh", new OpenerCommand() {
public void execute() {
// TODO 이벤트를 처리합니다.
}
});
Popup 윈도우
OpenerEvents.fireOpenerEvents("refresh");
Opener 윈도우에 이벤트 처리 핸들러를 등록해놓고, Popup 윈도우에서 이벤트를 실행시키는 형식입니다.
댓글
가장 많이 본 글
1월 17, 2013
[for신규가입자] 카페 가입시 30%할인쿠폰 전원 지급!
댓글
댓글 쓰기