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);
}
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;
}
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;
}
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();
}
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();
}
Aggregations