当前位置: 代码迷 >> Web前端 >> GWT权限验证:父类的普通方法调用父类抽象方法,而该抽象方法由其子类兑现
  详细解决方案

GWT权限验证:父类的普通方法调用父类抽象方法,而该抽象方法由其子类兑现

热度:160   发布时间:2012-09-12 09:21:30.0
GWT权限验证:父类的普通方法调用父类抽象方法,而该抽象方法由其子类实现

GWT权限验证:父类BaseActivity继承com.google.gwt.activity.shared.AbstractActivity实现start方法,在start方法中调用一个约束子类的抽象方法showStart方法,从而实现每一次访问都需要进行权限验证,这一点类似filter的思想,代码片段如下:。


package com.cdl.client.activity;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.cdl.client.GreetingServiceAsync;
import com.cdl.client.place.LoginPlace;
import com.cdl.client.util.ForWordString;
import com.cdl.client.util.tool.ClientFactory;
import com.cdl.client.util.tool.LayoutMenuiteComponent;
import com.cdl.client.util.tool.UserTool;
import com.cdl.client.view.compoment.MenuitemComponment;

public abstract class BaseActivity extends AbstractActivity {
	protected ClientFactory factory;
	protected VerticalPanel contentVerPanel;
	private MenuitemComponment navMenu;
	private LayoutMenuiteComponent menuiteComponment = UserTool.getLayOutMenuite();

	public BaseActivity(ClientFactory factory) {
		this.factory = factory;
	}

	/** 这个start方法主要用来做权限验证,然后再调用startShow方法 */
	@Override
	public void start(final AcceptsOneWidget panel, final EventBus eventBus) {

		GreetingServiceAsync service = UserTool.getGreetingservice();

		service.validateAdminLogin(new AsyncCallback<String>() {

			@Override
			public void onSuccess(String serverResult) {

				JSONValue serverVal = JSONParser.parseStrict(serverResult);
				JSONObject serverJson = serverVal.isObject();

				boolean status = serverJson.get("status").isBoolean().booleanValue();
				if (status) {

					contentVerPanel = new VerticalPanel();
					navMenu = menuiteComponment.getMenuitemComponment();

					int type = (int) serverJson.get("type").isNumber().doubleValue();

					// 根据管理员类型的不同,在contentVerPanel添加是否包含administration的水平导航菜单
					if (type == 1) {
						contentVerPanel.add(navMenu.createSuperAdminMenuHPanel());
					} else {
						contentVerPanel.add(navMenu.createNormalAdminMenuHPanel());
					}

					//子类实现的父类方法
					startShow(panel, eventBus);
				} else {
					PlaceController placeGo = UserTool.getClientfactory().getPlaceController();
					placeGo.goTo(new LoginPlace(ForWordString.LOGINPLACE));
				}
			}

			@Override
			public void onFailure(Throwable caught) {
				PlaceController placeGo = UserTool.getClientfactory()
						.getPlaceController();
				placeGo.goTo(new LoginPlace(ForWordString.LOGINPLACE));
			}
		});
	}

	/** 用户在start方法中验证权限后进入视图*/
	public abstract void startShow(AcceptsOneWidget panel, EventBus eventBus);
}







.

  相关解决方案