in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TobagoClientBehaviorRenderer.java [63:169]
public String getScript(final ClientBehaviorContext behaviorContext, final ClientBehavior behavior) {
final FacesContext facesContext = behaviorContext.getFacesContext();
final UIComponent uiComponent = behaviorContext.getComponent();
final ClientBehaviors eventName = ClientBehaviors.getEnum(behaviorContext.getEventName());
//// TBD: is this nice? May be implemented with a JSF behavior?
Collapse collapse = createCollapsible(facesContext, uiComponent);
String executeIds = null;
String renderIds = null;
Boolean transition = null;
String target = null;
String clientId = null;
String fieldId = null;
boolean omit = false;
boolean resetValues = false;
Integer delay = null;
Boolean stopPropagation = null;
String customEventName = null;
final String confirmation = ComponentUtils.getConfirmation(uiComponent);
if (behavior instanceof AjaxBehavior) {
final AjaxBehavior ajaxBehavior = (AjaxBehavior) behavior;
if (ajaxBehavior.isDisabled()) {
return null;
}
resetValues = ajaxBehavior.isResetValues();
String delayStr = ajaxBehavior.getDelay();
if (delayStr != null) {
if (!"none".equalsIgnoreCase(delayStr)) {
try {
delay = Integer.parseInt(delayStr);
} catch (NumberFormatException e) {
LOG.warn("Wrong delay attribute format '{}' of AjaxBehavior '{}' clientId '{}'!",
delayStr, eventName, clientId);
}
}
}
final Collection<String> execute = ajaxBehavior.getExecute();
final Collection<String> render = ajaxBehavior.getRender();
clientId = uiComponent.getClientId(facesContext);
if (uiComponent instanceof SupportFieldId) {
fieldId = ((SupportFieldId) uiComponent).getFieldId(facesContext);
}
executeIds = ComponentUtils.evaluateClientIds(facesContext, uiComponent, execute.toArray(new String[0]));
if (executeIds == null) {
executeIds = clientId;
} else if (!executeIds.contains(clientId)) {
executeIds = executeIds + " " + clientId;
}
if (uiComponent instanceof AbstractUICommand) { // <f:ajax> inside of a command
final AbstractUICommand command = (AbstractUICommand) uiComponent;
transition = command.isTransition();
target = command.getTarget();
omit = command.isOmit() || StringUtils.isNotBlank(RenderUtils.generateUrl(facesContext, command));
}
renderIds = ComponentUtils.evaluateClientIds(facesContext, uiComponent, render.toArray(new String[0]));
} else if (behavior instanceof EventBehavior) { // <tc:event>
final EventBehavior eventBehavior = (EventBehavior) behavior;
final AbstractUIEvent event = RenderUtils.getAbstractUIEvent(uiComponent, eventBehavior);
if (event != null) {
if (!event.isRendered() || event.isDisabled()) {
return null;
} else {
transition = event.isTransition();
target = event.getTarget();
clientId = event.getClientId(facesContext);
if (collapse == null) {
collapse = createCollapsible(facesContext, event);
}
omit = event.isOmit() || StringUtils.isNotBlank(RenderUtils.generateUrl(facesContext, event));
stopPropagation = event.getStopPropagation();
customEventName = event.getCustomEventName();
}
}
} else {
LOG.warn("Unknown behavior '{}'!", behavior.getClass().getName());
}
final Command command = new Command(
clientId,
fieldId,
transition,
target,
executeIds,
renderIds,
confirmation,
delay,
collapse,
omit,
stopPropagation,
customEventName);
if (resetValues) {
command.setResetValues(true);
}
final CommandMap map = new CommandMap();
map.addCommand(eventName, command);
CommandMap.storeCommandMap(facesContext, map);
// XXX the return value is a string, but we should use a CommandMap
return "dummy";
}