//
// step 1: call evalFormRequest(ureq) on each FormComponent this gives
// ....... for each element the possibility to intermediate save a value.
// ....... As a sideeffect the formcomponent to be dispatched is found.
EvaluatingFormComponentVisitor efcv = new EvaluatingFormComponentVisitor(dispatchUri);
FormComponentTraverser ct = new FormComponentTraverser(efcv, formLayout, false);
ct.visitAll(ureq);
// step 2: dispatch to the form component
// ......... only one component to be dispatched can be found, e.g. clicked
// ......... element....................................................
// ......... dispatch changes server model -> rerendered
// ......... dispatch may also request a form validation by
// ......... calling the submit
FormItem dispatchFormItem = efcv.getDispatchToComponent();
//.......... doDispatchFormRequest is called on the found item
//.......... which in turn may call submit(UserRequest ureq).
//.......... After submitting, which fires a ok/nok event
//.......... the code goes further with step 3.........................
if (implicitFormSubmit) {
//implicit Submit (Press Enter without on a Field without submit item.)
// see also OLAT-3141
submit(ureq);
}else{
if (dispatchFormItem == null) {
// source not found. This "never happens". Try to produce some hints.
String fbc = new String();
for (FormBasicController i: formListeners) {
if (fbc.length()>0) {
fbc += ",";
}
fbc+=(i.getClass().getName());
}
logWarn("OLAT-5061: Could not determine request source in FlexiForm >"+formName+"<. Check >"+fbc+"<", null);
// TODO: what now?
// Assuming the same as "implicitFormSubmit" for now.
submit(ureq);
} else {
// ****************************************
// explicit Submit or valid form dispatch *
// ****************************************
dispatchFormItem.doDispatchFormRequest(ureq);
// step 3: find parent container of dispatched component
// .......... check dependency rules
// .......... apply dependency rules
FindParentFormComponentVisitor fpfcv = new FindParentFormComponentVisitor(
dispatchFormItem);
ct = new FormComponentTraverser(fpfcv, formLayout, false);
ct.visitAll(ureq);
fpfcv.getParent().evalDependencyRuleSetFor(ureq, dispatchFormItem);
}
}
//
action = -1;