in myfaces-html5-core/src/main/java/org/apache/myfaces/html5/renderkit/util/Html5RendererUtils.java [523:579]
public static String buildBehaviorChain(FacesContext facesContext,
UIComponent uiComponent,
String eventName1, Collection<ClientBehaviorContext.Parameter> params,
String eventName2, Collection<ClientBehaviorContext.Parameter> params2,
Map<String, List<ClientBehavior>> clientBehaviors,
String userEventCode,
String serverEventCode) {
List<String> finalParams = new ArrayList<String>(3);
if (StringUtils.isNotBlank(userEventCode)) {
finalParams.add('\'' + escapeJavaScriptForChain(userEventCode) + '\'');
}
ScriptContext behaviorCode = new ScriptContext();
ScriptContext retVal = new ScriptContext();
boolean submitting1 = getClientBehaviorScript(facesContext, uiComponent, eventName1, clientBehaviors,
behaviorCode, params);
boolean submitting2 = getClientBehaviorScript(facesContext, uiComponent, eventName2, clientBehaviors,
behaviorCode, params2);
// ClientBehaviors for both events have to be checked for the Submitting hint
boolean submitting = submitting1 || submitting2;
if (StringUtils.isNotBlank(behaviorCode.toString())) {
finalParams.add(behaviorCode.toString());
}
if (StringUtils.isNotBlank(serverEventCode)) {
finalParams.add('\'' + escapeJavaScriptForChain(serverEventCode) + '\'');
}
Iterator<String> it = finalParams.iterator();
// It's possible that there are no behaviors to render. For example, if we have
// <f:ajax disabled="true" /> as the only behavior.
if (it.hasNext()) {
if (!submitting) {
retVal.append("return ");
}
//according to the spec jsf.util.chain has to be used to build up the behavior and scripts
retVal.append("jsf.util.chain(document.getElementById('"
+ uiComponent.getClientId(facesContext) + "'), event,");
while (it.hasNext()) {
retVal.append(it.next());
if (it.hasNext()) {
retVal.append(", ");
}
}
retVal.append(");");
if (submitting) {
retVal.append(" return false;");
}
}
return retVal.toString();
}