/** Returns the current {@link ExecutionCtrl}. */ public static final ExecutionCtrl getCurrentCtrl() { return (ExecutionCtrl) getCurrent(); }
public void forward(Writer out, String page, Map<String, ?> params, int mode) throws IOException { final Execution exec = ExecutionsCtrl.getCurrent(); ExecutionsCtrl.setCurrent(null); //It is fake one and shall not be re-used by forward try { super.forward(out, page, params, mode); } finally { ExecutionsCtrl.setCurrent(exec); } }
/** Creates an desktop. */ private Desktop newDesktop(Session sess, ServletRequest request, ServletResponse response, String path) { final Locator loc = PageDefinitions.getLocator(_wapp, path); //we have to retrieve locator before setting execution, //since it assumes exec.getDesktop not null //which is true except this moment (before desktop is created) final Execution exec = ExecutionsCtrl.getCurrent(); final TemporaryExecution de = new TemporaryExecution(_ctx, (HttpServletRequest) request, (HttpServletResponse) response, null); ExecutionsCtrl.setCurrent(de); try { Desktop desktop = ((WebAppCtrl) _wapp).getUiFactory() .newDesktop(new RequestInfoImpl(_wapp, sess, null, request, loc), _updateURI, path); return !de.isVoided() ? desktop : null; } finally { ExecutionsCtrl.setCurrent(exec); } }
/** Creates a page. * It invokes {@link UiFactory#newPage}. However, it prepares * {@link ExecutionsCtrl#getCurrent} for {@link org.zkoss.zk.ui.sys.IdGenerator#nextPageUuid} * * <p>Note: Use this method to create a page, rather than invoking * {@link UiFactory#newPage} directly. * @since 3.6.0 */ public static Page newPage(UiFactory uf, RequestInfo ri, Richlet richlet, ServletResponse response, String path) { final DesktopCtrl desktopCtrl = (DesktopCtrl) ri.getDesktop(); final Execution exec = ExecutionsCtrl.getCurrent(); TemporaryExecution de = new TemporaryExecution(ri.getWebApp().getServletContext(), (HttpServletRequest) ri.getNativeRequest(), (HttpServletResponse) response, ri.getDesktop()); desktopCtrl.setExecution(de); ExecutionsCtrl.setCurrent(de); try { return uf.newPage(ri, richlet, path); //de won't be voided since no DesktopInit-like plugin } finally { ExecutionsCtrl.setCurrent(exec); desktopCtrl.setExecution(exec); } }
/** Creates a page. * It invokes {@link UiFactory#newPage}. However, it prepares * {@link ExecutionsCtrl#getCurrent} for {@link org.zkoss.zk.ui.sys.IdGenerator#nextPageUuid} * * <p>Note: Use this method to create a page, rather than invoking * {@link UiFactory#newPage} directly. * @since 3.6.0 */ public static Page newPage(UiFactory uf, RequestInfo ri, PageDefinition pagedef, ServletResponse response, String path) { final DesktopCtrl desktopCtrl = (DesktopCtrl) ri.getDesktop(); final Execution exec = ExecutionsCtrl.getCurrent(); TemporaryExecution de = new TemporaryExecution(ri.getWebApp().getServletContext(), (HttpServletRequest) ri.getNativeRequest(), (HttpServletResponse) response, ri.getDesktop()); desktopCtrl.setExecution(de); ExecutionsCtrl.setCurrent(de); try { return uf.newPage(ri, pagedef, path); //de won't be voided since no DesktopInit-like plugin } finally { ExecutionsCtrl.setCurrent(exec); desktopCtrl.setExecution(exec); } }