_formSupport = new FormSupportImpl();
_environment.push(ValidationTracker.class, _tracker);
_environment.push(FormSupport.class, _formSupport);
Heartbeat heartbeat = new HeartbeatImpl();
_environment.push(Heartbeat.class, heartbeat);
heartbeat.begin();
try
{
ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(_eventResultProcessor);
_resources.triggerEvent(PREPARE_FOR_SUBMIT, context, callback);
if (callback.isAborted()) return true;
_resources.triggerEvent(PREPARE, context, callback);
if (callback.isAborted()) return true;
// TODO: Ajax stuff will eventually mean there are multiple values for this parameter
// name
String actionsBase64 = _request.getParameter(FORM_DATA);
ObjectInputStream ois = null;
Component component = null;
try
{
ois = new Base64ObjectInputStream(actionsBase64);
while (true)
{
String componentId = ois.readUTF();
ComponentAction action = (ComponentAction) ois.readObject();
component = _source.getComponent(componentId);
action.execute(component);
component = null;
}
}
catch (EOFException ex)
{
// Expected
}
catch (Exception ex)
{
Location location = component == null ? null : component.getComponentResources().getLocation();
throw new TapestryException(ex.getMessage(), location, ex);
}
finally
{
TapestryInternalUtils.close(ois);
}
heartbeat.end();
ValidationTracker tracker = _environment.peek(ValidationTracker.class);
// Let the listeners peform any final validations