private static void renderHandler( FacesContext context, UIComponent component, Collection<ClientBehaviorContext.Parameter> params, String handlerName, Object handlerValue, String behaviorEventName) throws IOException { ResponseWriter writer = context.getResponseWriter(); String userHandler = getNonEmptyUserHandler(handlerValue); List<ClientBehavior> behaviors = getClientBehaviors(component, behaviorEventName); if ((null != behaviors) && (behaviors.size() > 0) && componentIsDisabled(component)) { behaviors = null; } if (params == null) { params = Collections.emptyList(); } String handler = null; switch (getHandlerType(behaviors, params, userHandler)) { case USER_HANDLER_ONLY: handler = userHandler; break; case SINGLE_BEHAVIOR_ONLY: handler = getSingleBehaviorHandler( context, component, behaviors.get(0), params, behaviorEventName); break; case SUBMIT_ONLY: handler = getSubmitHandler(context, component, params, true); break; case CHAIN: handler = getChainedHandler( context, component, behaviors, params, behaviorEventName, userHandler); break; default: assert (false); } writer.writeAttribute(handlerName, handler, null); }
@SuppressWarnings("rawtypes") public static void renderSelectOnclick(FacesContext context, UIComponent component) throws IOException { final String handlerName = "onclick"; final Object userHandler = component.getAttributes().get(handlerName); String behaviorEventName = "valueChange"; if (component instanceof ClientBehaviorHolder) { Map behaviors = ((ClientBehaviorHolder) component).getClientBehaviors(); if (null != behaviors && behaviors.containsKey("click")) { behaviorEventName = "click"; } } renderHandler( context, component, Collections.<Parameter>emptyList(), handlerName, userHandler, behaviorEventName); }