⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractexecution.java

📁 非常接近C/S操作方式的Java Ajax框架-ZK 用ZK框架使你的B/S应用程序更漂亮更易操作。 官网:www.zkoss.org
💻 JAVA
字号:
/* AbstractExecution.java{{IS_NOTE	Purpose:			Description:			History:		Mon Jun  6 12:18:25     2005, Created by tomyeh}}IS_NOTECopyright (C) 2005 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.zk.ui.impl;import java.util.List;import java.util.LinkedList;import java.util.Map;import java.util.HashMap;import java.util.Collections;import java.io.Reader;import java.io.IOException;import javax.servlet.jsp.el.VariableResolver;import javax.servlet.jsp.el.ELException;import org.zkoss.lang.Classes;import org.zkoss.idom.Document;import org.zkoss.web.servlet.Servlets;import org.zkoss.web.el.ELContexts;import org.zkoss.web.el.ELContext;import org.zkoss.zk.ui.Execution;import org.zkoss.zk.ui.Desktop;import org.zkoss.zk.ui.Page;import org.zkoss.zk.ui.Component;import org.zkoss.zk.ui.UiException;import org.zkoss.zk.ui.event.Event;import org.zkoss.zk.ui.metainfo.PageDefinition;import org.zkoss.zk.ui.metainfo.ComponentDefinition;import org.zkoss.zk.ui.metainfo.InstanceDefinition;import org.zkoss.zk.ui.sys.WebAppCtrl;import org.zkoss.zk.ui.sys.ExecutionCtrl;import org.zkoss.zk.ui.sys.Visualizer;import org.zkoss.zk.ui.sys.UiEngine;import org.zkoss.zk.au.AuResponse;/** * A skeletal implementation of {@link Execution}. * * @author tomyeh */abstract public class AbstractExecution implements Execution, ExecutionCtrl {	private final Desktop _desktop;	private Page _curpage;	private PageDefinition _curpgdef;	private Visualizer _ei;	private List _events;	/** A stack of args being pushed by {@link #pushArg}. */	private List _args;	//private Event _evtInProc;	/** Which page is being created, or null if all in update mode. */	private final Page _creating;	private final ExecutionResolver _exresolv;	/** Constructs an execution.	 * @param creating which page is being creating for this execution, or	 * null if none is being created.	 * {@link #isAsyncUpdate} returns based on this.	 */	protected AbstractExecution(Desktop desktop, Page creating, VariableResolver resolv) {		_desktop = desktop;		_creating = creating;		_exresolv = new ExecutionResolver(this, resolv);	}	/** Returns the JSP context for this execution.	 * A derive must implement this method.	 */	abstract protected ELContext getELContext();	//-- Execution --//	public boolean isAsyncUpdate(Page page) {		return page != null && (_creating == null || _creating != page);	}	public Desktop getDesktop() {		return _desktop;	}	public Object evaluate(Component comp, String expr, Class expectedType) {		return evaluate0(comp, expr, expectedType,			comp != null ? comp.getPage(): null);	}	public Object evaluate(Page page, String expr, Class expectedType) {		return evaluate0(page, expr, expectedType, page);	}	private Object evaluate0(Object self, String expr,	Class expectedType, Page page) {		if (expr == null || expr.length() == 0 || expr.indexOf("${") < 0) {			if (expectedType == Object.class || expectedType == String.class)				return expr;			return Classes.coerce(expectedType, expr);		}		try {			if (page == null) page = _curpage;			_exresolv.setSelf(self);			return getELContext().getExpressionEvaluator().evaluate(				expr, expectedType, _exresolv,				page != null ? page.getFunctionMapper(): null);		} catch (ELException ex) {			throw UiException.Aide.wrap(ex);		}	}	public void postEvent(Event evt) {		if (evt == null)			throw new IllegalArgumentException("null");		if (_events == null)			_events = new LinkedList();		_events.add(evt);	}	public VariableResolver getVariableResolver() {		return _exresolv;	}	//-- ExecutionCtrl --//	public final Page getCurrentPage() {		return _curpage;	}	public final void setCurrentPage(Page curpage) {		if (_curpage != null && curpage != null && _curpage != curpage		&& _curpage.getDesktop() != curpage.getDesktop())			throw new IllegalStateException("Change current page to another desktop? "+curpage);		_curpage = curpage;	}	public PageDefinition getCurrentPageDefinition() {		return _curpgdef;	}	public void setCurrentPageDefinition(PageDefinition pgdef) {		_curpgdef = pgdef;	}	public Event getNextEvent() {		return _events != null && !_events.isEmpty() ?			(Event)_events.remove(0): null;	}	public boolean isActivated() {		return _ei != null;	}	public void onActivate() {		ELContexts.push(getELContext());	}	public void onDeactivate() {		ELContexts.pop();	}	public void setVisualizer(Visualizer ei) {		_ei = ei;	}	public Visualizer getVisualizer() {		return _ei;	}	public String toAbsoluteURI(String uri, boolean skipInclude) {		if (uri != null && uri.length() > 0) {			final char cc = uri.charAt(0);			if (cc != '/' && cc != '~' && !(skipInclude && isIncluded())			&& !Servlets.isUniversalURL(uri)) {				final String dir = getDesktop().getCurrentDirectory();				if (dir != null)					return dir + uri;			}		}		return uri;		//we ignore _creating, because Servlet's include cannot handle		//related URI correctly (even though it is by the layout servlet)	}	private final UiEngine getUiEngine() {		return ((WebAppCtrl)_desktop.getWebApp()).getUiEngine();	}	public Component createComponents(String uri, Component parent,	Map arg) {		//if (log.debugable()) log.debug("Creating from "+uri);		return getUiEngine().createComponents(			this, getPageDefinition(uri), _curpage, parent, arg);	}	public Component createComponents(PageDefinition pagedef,	Component parent, Map arg) {		if (pagedef == null)			throw new IllegalArgumentException("pagedef cannot be null");		return getUiEngine().createComponents(			this, pagedef, _curpage, parent, arg);	}	public Component createComponentsDirectly(String content, String ext,	Component parent, Map arg) {		return getUiEngine().createComponents(			this, getPageDefinitionDirectly(content, ext), _curpage,			parent, arg);	}	public Component createComponentsDirectly(Document content, String ext,	Component parent, Map arg) {		return getUiEngine().createComponents(			this, getPageDefinitionDirectly(content, ext), _curpage,			parent, arg);	}	public Component createComponentsDirectly(Reader reader, String ext,	Component parent, Map arg) throws IOException {		return getUiEngine().createComponents(			this, getPageDefinitionDirectly(reader, ext), _curpage,			parent, arg);	}	public void sendRedirect(String uri) {		getUiEngine().sendRedirect(uri, null);	}	public void sendRedirect(String uri, String target) {		getUiEngine().sendRedirect(uri, target);	}	public Map getArg() {		return _args != null ? (Map)_args.get(0): Collections.EMPTY_MAP;	}	public void pushArg(Map arg) {		if (_args == null)			_args = new LinkedList();		_args.add(0, arg);	}	public void popArg() {		if (_args != null) {			if (_args.size() == 1)				_args = null;			else				_args.remove(0);		}	}	public void addAuResponse(String key, AuResponse response) {		getUiEngine().addResponse(key, response);	}	//Object//	public String toString() {		return "[Exec"+System.identityHashCode(this)+": "+_desktop+']';	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -