in myfaces-html5-core/src/main/java/org/apache/myfaces/html5/renderkit/util/Html5RendererUtils.java [478:521]
public static String buildBehaviorChain(FacesContext facesContext,
UIComponent uiComponent,
String eventName, Collection<ClientBehaviorContext.Parameter> params,
Map<String, List<ClientBehavior>> clientBehaviors,
String userEventCode, String serverEventCode) {
ExternalContext externalContext = facesContext.getExternalContext();
List<String> finalParams = new ArrayList<String>(3);
if(StringUtils.isNotBlank(userEventCode)){
// escape every ' in the user event code since it will
// be a string attribute of jsf.util.chain
finalParams.add('\'' + escapeJavaScriptForChain(userEventCode) + '\'');
}
ScriptContext behaviorCode = new ScriptContext();
ScriptContext retVal = new ScriptContext();
getClientBehaviorScript(facesContext, uiComponent, eventName, clientBehaviors,
behaviorCode, params);
if (behaviorCode!=null && 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()) {
//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(");");
}
return retVal.toString();
}