Search in sources :

Example 6 with Submit

use of org.apache.tapestry5.corelib.components.Submit in project tapestry-5 by apache.

the class FormFragment method beginRender.

/**
 * Renders a <div> tag and provides an override of the {@link org.apache.tapestry5.services.FormSupport}
 * environmental.
 */
void beginRender(MarkupWriter writer) {
    FormSupport formSupport = environment.peekRequired(FormSupport.class);
    String clientId = getClientId();
    hiddenFieldPositioner = new HiddenFieldPositioner(writer, rules);
    Element element = writer.element(this.element, "id", clientId, "data-component-type", "core/FormFragment");
    if (alwaysSubmit) {
        element.attribute("data-always-submit", "true");
    }
    resources.renderInformalParameters(writer);
    if (!visible) {
        element.attribute("style", "display: none;");
        if (!alwaysSubmit) {
            javascriptSupport.require("t5/core/form-fragment").invoke("hide").with(clientId);
        }
    }
    componentActions = new ComponentActionSink(logger, clientDataEncoder);
    // Here's the magic of environmentals ... we can create a wrapper around
    // the normal FormSupport environmental that intercepts some of the behavior.
    // Here we're setting aside all the actions inside the FormFragment so that we
    // can control whether those actions occur when the form is submitted.
    FormSupport override = new FormSupportAdapter(formSupport) {

        @Override
        public <T> void store(T component, ComponentAction<T> action) {
            componentActions.store(component, action);
        }

        @Override
        public <T> void storeCancel(T component, ComponentAction<T> action) {
            componentActions.storeCancel(component, action);
        }

        @Override
        public <T> void storeAndExecute(T component, ComponentAction<T> action) {
            componentActions.store(component, action);
            action.execute(component);
        }
    };
    // Tada! Now all the enclosed components will use our override of FormSupport,
    // until we pop it off.
    environment.push(FormSupport.class, override);
}
Also used : ComponentActionSink(org.apache.tapestry5.corelib.internal.ComponentActionSink) HiddenFieldPositioner(org.apache.tapestry5.corelib.internal.HiddenFieldPositioner) Element(org.apache.tapestry5.dom.Element) FormSupportAdapter(org.apache.tapestry5.corelib.internal.FormSupportAdapter) FormSupport(org.apache.tapestry5.services.FormSupport)

Example 7 with Submit

use of org.apache.tapestry5.corelib.components.Submit in project tapestry-5 by apache.

the class Submit method selected.

private boolean selected(String clientId, String elementName) {
    // Case #1: via JavaScript, the client id is passed up.
    String raw = request.getParameter(Form.SUBMITTING_ELEMENT_ID);
    if (InternalUtils.isNonBlank(raw) && new JSONArray(raw).getString(0).equals(clientId)) {
        return true;
    }
    // Case #2: No JavaScript, look for normal semantic (non-null value for the element's name).
    // If configured as an image submit, look for a value for the x position. Ah, the ugliness
    // of HTML.
    String name = image == null ? elementName : elementName + ".x";
    String value = request.getParameter(name);
    return value != null;
}
Also used : JSONArray(org.apache.tapestry5.json.JSONArray)

Example 8 with Submit

use of org.apache.tapestry5.corelib.components.Submit in project tapestry-5 by apache.

the class PageRenderDispatcher method dispatch.

public boolean dispatch(Request request, final Response response) throws IOException {
    if (request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND) != null) {
        // This needs to be cleared out because the container may submit a request back into the filter
        // for the 404 page and some containers reuse the existing HttpServletRequest. See TAP5-2388.
        request.setAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND, null);
        return false;
    }
    PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
    if (parameters == null)
        return false;
    componentRequestHandler.handlePageRender(parameters);
    return true;
}
Also used : PageRenderRequestParameters(org.apache.tapestry5.services.PageRenderRequestParameters)

Example 9 with Submit

use of org.apache.tapestry5.corelib.components.Submit in project tapestry-5 by apache.

the class SubmitTest method trigger_deferred.

@Test
public void trigger_deferred() {
    Request request = mockRequest();
    ComponentResources resources = mockComponentResources();
    FormSupportImpl support = new FormSupportImpl(null, null);
    String elementName = "myname";
    // Also: test for the alternate, JavaScript oriented way, of determining the
    // element/component that triggered the submission.
    train_getParameter(request, Form.SUBMITTING_ELEMENT_ID, "[ 'xyz', 'pdq' ]");
    replay();
    Submit submit = new Submit(request);
    TestBase.set(submit, "resources", resources, "formSupport", support);
    submit.processSubmission("xyz", elementName);
    verify();
    expect(resources.triggerEvent(EventConstants.SELECTED, null, null)).andReturn(false);
    replay();
    support.executeDeferred();
    verify();
}
Also used : Request(org.apache.tapestry5.http.services.Request) FormSupportImpl(org.apache.tapestry5.corelib.internal.FormSupportImpl) ComponentResources(org.apache.tapestry5.ComponentResources) Test(org.testng.annotations.Test)

Example 10 with Submit

use of org.apache.tapestry5.corelib.components.Submit in project tapestry-5 by apache.

the class SubmitTest method not_trigger_of_submission.

@Test
public void not_trigger_of_submission() {
    Request request = mockRequest();
    String elementName = "myname";
    train_getParameter(request, Form.SUBMITTING_ELEMENT_ID, null);
    train_getParameter(request, elementName, null);
    replay();
    Submit submit = new Submit(request);
    submit.processSubmission("xyz", elementName);
    verify();
}
Also used : Request(org.apache.tapestry5.http.services.Request) Test(org.testng.annotations.Test)

Aggregations

Test (org.testng.annotations.Test)8 Request (org.apache.tapestry5.http.services.Request)5 ComponentResources (org.apache.tapestry5.ComponentResources)4 Element (org.apache.tapestry5.dom.Element)4 FormSupport (org.apache.tapestry5.services.FormSupport)4 ComponentActionSink (org.apache.tapestry5.corelib.internal.ComponentActionSink)2 Heartbeat (org.apache.tapestry5.services.Heartbeat)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 Asset (org.apache.tapestry5.Asset)1 Form (org.apache.tapestry5.corelib.components.Form)1 FormSupportAdapter (org.apache.tapestry5.corelib.internal.FormSupportAdapter)1 FormSupportImpl (org.apache.tapestry5.corelib.internal.FormSupportImpl)1 HiddenFieldPositioner (org.apache.tapestry5.corelib.internal.HiddenFieldPositioner)1 Document (org.apache.tapestry5.dom.Document)1 Visitor (org.apache.tapestry5.dom.Visitor)1 Link (org.apache.tapestry5.http.Link)1 BeanValidationContextImpl (org.apache.tapestry5.internal.BeanValidationContextImpl)1 HeartbeatImpl (org.apache.tapestry5.internal.services.HeartbeatImpl)1