`
dengyin2000
  • 浏览: 1208923 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

GWT的loading indicator(装载指示器)

    博客分类:
  • gwt
阅读更多
本文参考:http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/7ed0d179b89fa062/aaeb5391a760adef?lnk=gst&q=indicator+AsyncCallback&rnum=1#aaeb5391a760adef

大部分代码也是参考文中的。

package com.javaeye.dengyin2000.truck.client.server;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;

public abstract class AsyncCallbackWithStatus implements AsyncCallback {
	private static LoadingIndicator loadingIndicator;

	public static final void setLoadingIndicator(LoadingIndicator indicator) {
		loadingIndicator = indicator;
	}

	public AsyncCallbackWithStatus() {
		setLoading(true);
	}

	public final void onSuccess(Object object) {
		setLoading(false);
		onSuccessInternal(object);
	}

	public final void onFailure(Throwable throwable) {
		setLoading(false);
		onFailureInternal(throwable);
	}

	protected abstract void onSuccessInternal(Object object);

	protected void onFailureInternal(Throwable throwable){
		Window.alert("服务器没有响应,请稍后再试!");
	}

	private void setLoading(boolean isLoading) {
		if (null != loadingIndicator) {
			if (isLoading) {
				loadingIndicator.show();
			} else {
				loadingIndicator.hide();
			}
		}
	}

	interface LoadingIndicator {
		void show();

		void hide();
	}

}


package com.javaeye.dengyin2000.truck.client.server;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowResizeListener;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.PopupPanel;
import com.javaeye.dengyin2000.truck.client.server.AsyncCallbackWithStatus.LoadingIndicator;

public class LoadingStatus implements LoadingIndicator, WindowResizeListener {
    private PopupPanel popup;

    public LoadingStatus() {
        popup = new PopupPanel();
        popup.add(new HTML("<div style='background-color: red;'> Loading, please wait...</div>"));
        placeIndicator();
        Window.addWindowResizeListener(this);
        // set the style name for greater control over the
    }

    public void show() {
        popup.show(); 
    }

    public void hide() {
        popup.hide();
    }

    private void placeIndicator(){
    	popup.setPopupPosition(Window.getClientWidth() - 120, 10);
    }
    
    public void onWindowResized(int width, int height) {
    	 placeIndicator();
    } 

}


在你的EntryPoint中装配好你的indicator

	private void prepareLoadingIndicator(){
		LoadingStatus status = new LoadingStatus();
		AsyncCallbackWithStatus.setLoadingIndicator(status);
	}


这样调用。

	private void populateAndReadEnterprisesInfo(){
		GWTRPCServiceLocator.getUserService().getEnterprisesInfo(new AsyncCallbackWithStatus(){

			protected void onSuccessInternal(Object object) {
				EnterprisesInfoGTO gto = (EnterprisesInfoGTO) object;
				enterpriseName.setText(gto.getEnterprisesName());
				contactName.setText(gto.getContactName());
				contactTel.setText(gto.getContactTel());
				contactFax.setText(gto.getContactFax());
				contactAddress.setText(gto.getContactAddress());
				zipCode.setText(gto.getZipCode());
				email.setText(gto.getEmail());
				siteAddress.setText(gto.getSiteAddress());
			}
			
		});
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics