/** * {@inheritDoc} */ public void renderComponent(IRequestCycle cycle, IComponent component) { if (cycle.isRewinding()) return; if (Component.class.isInstance(component) && !((Component)component).hasEvents() && !IForm.class.isInstance(component)) return; if (TapestryUtils.getOptionalPageRenderSupport(cycle) == null) return; // Don't render fields being pre-rendered, otherwise we'll render twice IComponent field = (IComponent)cycle.getAttribute(TapestryUtils.FIELD_PRERENDER); if (field != null && field == component) return; linkComponentEvents(cycle, component); linkElementEvents(cycle, component); if (IForm.class.isInstance(component)) mapFormNames(cycle, (IForm)component); if (isDeferredForm(component)) linkDeferredForm(cycle, (IForm)component); }
void linkElementEvents(IRequestCycle cycle, IComponent component) { if (!component.getSpecification().hasElementEvents()) return; DirectEventServiceParameter dsp = new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false); String url = _eventEngine.getLink(false, dsp).getURL(); PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getElementScript(); Map elements = component.getSpecification().getElementEvents(); Iterator keys = elements.keySet().iterator(); // build our list of targets / events while (keys.hasNext()) { Map parms = new HashMap(); String target = (String)keys.next(); ComponentEventProperty prop = (ComponentEventProperty)elements.get(target); parms.put("component", component); parms.put("target", target); parms.put("url", url); parms.put("events", getEvents(prop, target)); parms.put("formEvents", filterFormEvents(prop, parms, cycle)); _scriptSource.getScript(resource).execute(component, cycle, prs, parms); } }
void linkDeferredForm(IRequestCycle cycle, IForm form) { List deferred = (List)_deferredFormConnections.remove(form.getExtendedId()); for (int i=0; i < deferred.size(); i++) { DeferredFormConnection fConn = (DeferredFormConnection)deferred.get(i); Map scriptParms = fConn._scriptParms; // don't want any events accidently connected again scriptParms.remove("events"); IComponent component = (IComponent)scriptParms.get("component"); // fire off element based events first linkElementEvents(cycle, component); ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId()); if (props == null) continue; for (int e=0; e < props.length; e++) { Object[][] formEvents = buildFormEvents(cycle, form.getExtendedId(), props[e].getFormEvents(), fConn._async, fConn._validate, fConn._uniqueHash); scriptParms.put("formEvents", formEvents); // execute script PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getScript(component); _scriptSource.getScript(resource).execute(form, cycle, prs, scriptParms); } } }
void linkComponentEvents(IRequestCycle cycle, IComponent component) { ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId()); if (props == null) return; for (int i=0; i < props.length; i++) { String clientId = component.getClientId(); Map parms = new HashMap(); parms.put("clientId", clientId); parms.put("component", component); Object[][] events = getEvents(props[i], clientId); Object[][] formEvents = filterFormEvents(props[i], parms, cycle); if (events.length < 1 && formEvents.length < 1) continue; DirectEventServiceParameter dsp = new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false); parms.put("url", _eventEngine.getLink(false, dsp).getURL()); parms.put("events", events); parms.put("formEvents", formEvents); PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getScript(component); _scriptSource.getScript(resource).execute(component, cycle, prs, parms); } }
deferFormConnection(formId, scriptParms, listener.isAsync(), listener.isValidateForm(),
void linkElementEvents(IRequestCycle cycle, IComponent component) { if (!component.getSpecification().hasElementEvents()) return; DirectEventServiceParameter dsp = new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false); String url = _eventEngine.getLink(false, dsp).getURL(); PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getElementScript(); Map elements = component.getSpecification().getElementEvents(); Iterator keys = elements.keySet().iterator(); // build our list of targets / events while (keys.hasNext()) { Map parms = new HashMap(); String target = (String)keys.next(); ComponentEventProperty prop = (ComponentEventProperty)elements.get(target); parms.put("component", component); parms.put("target", target); parms.put("url", url); parms.put("events", getEvents(prop, target)); parms.put("formEvents", filterFormEvents(prop, parms, cycle)); _scriptSource.getScript(resource).execute(component, cycle, prs, parms); } }
void linkDeferredForm(IRequestCycle cycle, IForm form) { List deferred = (List)_deferredFormConnections.remove(form.getExtendedId()); for (int i=0; i < deferred.size(); i++) { DeferredFormConnection fConn = (DeferredFormConnection)deferred.get(i); Map scriptParms = fConn._scriptParms; // don't want any events accidently connected again scriptParms.remove("events"); IComponent component = (IComponent)scriptParms.get("component"); // fire off element based events first linkElementEvents(cycle, component); ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId()); if (props == null) continue; for (int e=0; e < props.length; e++) { Object[][] formEvents = buildFormEvents(cycle, form.getExtendedId(), props[e].getFormEvents(), fConn._async, fConn._validate, fConn._uniqueHash); scriptParms.put("formEvents", formEvents); // execute script PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getScript(component); _scriptSource.getScript(resource).execute(form, cycle, prs, scriptParms); } } }
void linkComponentEvents(IRequestCycle cycle, IComponent component) { ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId()); if (props == null) return; for (int i=0; i < props.length; i++) { String clientId = component.getClientId(); Map parms = new HashMap(); parms.put("clientId", clientId); parms.put("component", component); Object[][] events = getEvents(props[i], clientId); Object[][] formEvents = filterFormEvents(props[i], parms, cycle); if (events.length < 1 && formEvents.length < 1) continue; DirectEventServiceParameter dsp = new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false); parms.put("url", _eventEngine.getLink(false, dsp).getURL()); parms.put("events", events); parms.put("formEvents", formEvents); PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component); Resource resource = getScript(component); _scriptSource.getScript(resource).execute(component, cycle, prs, parms); } }
deferFormConnection(formId, scriptParms, listener.isAsync(), listener.isValidateForm(),
/** * {@inheritDoc} */ public void renderComponent(IRequestCycle cycle, IComponent component) { if (cycle.isRewinding()) return; if (Component.class.isInstance(component) && !((Component)component).hasEvents() && !IForm.class.isInstance(component)) return; if (TapestryUtils.getOptionalPageRenderSupport(cycle) == null) return; // Don't render fields being pre-rendered, otherwise we'll render twice IComponent field = (IComponent)cycle.getAttribute(TapestryUtils.FIELD_PRERENDER); if (field != null && field == component) return; linkComponentEvents(cycle, component); linkElementEvents(cycle, component); if (IForm.class.isInstance(component)) mapFormNames(cycle, (IForm)component); if (isDeferredForm(component)) linkDeferredForm(cycle, (IForm)component); }