public void handleComponentEvent(final ComponentEventRequestParameters parameters, final ComponentRequestHandler handler) throws IOException { String componentId = parameters.getNestedComponentId().equals("") ? parameters.getContainingPageName() : parameters.getContainingPageName() + ":" + parameters.getNestedComponentId(); tracker.perform(String.format("Handling %s '%s' component event request for %s.", request.isXHR() ? "Ajax" : "traditional", parameters.getEventType(), componentId), new IOOperation<Void>() { public Void perform() throws IOException { handler.handleComponentEvent(parameters); return null; } }); }
String eventType = parameters.getEventType();
boolean handled = element.triggerContextEvent(parameters.getEventType(), parameters.getEventContext(), callback); throw new TapestryException(String.format("Request event '%s' (on component %s) was not handled; you must provide a matching event handler method in the component or in one of its containers.", parameters.getEventType(), element.getCompleteId()), element, null);
.triggerContextEvent(parameters.getEventType(), parameters.getEventContext(), callback); throw new TapestryException(String.format("Request event '%s' (on component %s) was not handled; you must provide a matching event handler method in the component or in one of its containers.", parameters.getEventType(), element.getCompleteId()), element, null);
public Link transformComponentEventLink(Link defaultLink, ComponentEventRequestParameters parameters) { Link link = defaultLink.copyWithBasePath("/event"); for (String name : defaultLink.getParameterNames()) { link.removeParameter(name); } Locale locale = persistentLocale.get(); if (locale != null) { link.addParameter("x:locale", locale.toString()); } link.addParameter("x:type", parameters.getEventType()); addEventContext(link, "x:ec", parameters.getEventContext()); addEventContext(link, "x:pac", parameters.getPageActivationContext()); link.addParameter("x:page", parameters.getActivePageName()); link.addParameter("x:id", parameters.getNestedComponentId()); if (!parameters.getActivePageName().equals(parameters.getContainingPageName())) link.addParameter("x:container", parameters.getContainingPageName()); return link; }
@Test public void decode_compoent_event_request_with_slash_in_context_path() throws Exception { ComponentClassResolver resolver = mockComponentClassResolver(); Request request = mockRequest(); Response response = mockResponse(); LocalizationSetter ls = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); expect(ls.isSupportedLocaleName("page.component:event")).andReturn(false); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null); train_getLocale(request, Locale.ENGLISH); ls.setNonPersistentLocaleFromLocaleName("en"); train_getPath(request, "/foo/bar/page.component:event"); train_isPageName(resolver, "page", true); train_canonicalizePageName(resolver, "page", "Page"); replay(); ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "foo/bar", metaDataLocator, null); ComponentEventRequestParameters parameters = linkEncoder.decodeComponentEventRequest(request); assertNotNull(parameters); assertEquals(parameters.getActivePageName(), "Page"); assertEquals(parameters.getEventType(), "event"); verify(); }