public static String buildBehaviorChain()

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

    }