String clientId = uiComponent.getClientId(facesContext);
ResponseWriter writer = facesContext.getResponseWriter();
// commandButton does not need to be nested in a form since JSF 2.0
FormInfo formInfo = findNestingForm(uiComponent, facesContext);
boolean reset = isReset(uiComponent);
boolean button = isButton(uiComponent);
Map<String, List<ClientBehavior>> behaviors = null;
if (uiComponent instanceof ClientBehaviorHolder)
{
behaviors = ((ClientBehaviorHolder) uiComponent).getClientBehaviors();
if (!behaviors.isEmpty())
{
ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
}
}
// If we are nested in a form, and we have javascript enabled, and autoscroll is enabled,
// we should write the form submit script
// (define oamSetHiddenInput, oamClearHiddenInput, oamSubmitForm)
// because oamSetHiddenInput is called on onclick function
List<UIComponent> childrenList = null;
if (getChildCount(uiComponent) > 0)
{
childrenList = getChildren(uiComponent);
}
else
{
childrenList = Collections.emptyList();
}
List<UIParameter> validParams = HtmlRendererUtils.getValidUIParameterChildren(
facesContext, childrenList, false, false);
boolean javascriptAllowed = JavascriptUtils.isJavascriptAllowed(facesContext.getExternalContext());
if (formInfo != null && javascriptAllowed
&& (MyfacesConfig.getCurrentInstance(facesContext.getExternalContext()).isAutoScroll() ||
(validParams != null && !validParams.isEmpty() )))
{
HtmlRendererUtils.renderFormSubmitScript(facesContext);
}
String commandOnclick = (String)uiComponent.getAttributes().get(HTML.ONCLICK_ATTR);
if (commandOnclick != null && (validParams != null && !validParams.isEmpty() ) )
{
ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
}
writer.startElement(HTML.INPUT_ELEM, uiComponent);
writer.writeAttribute(HTML.ID_ATTR, clientId, org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.ID_ATTR);
writer.writeAttribute(HTML.NAME_ATTR, clientId, JSFAttr.ID_ATTR);
ExternalContext externalContext = facesContext.getExternalContext();
String image = RendererUtils.getIconSrc(facesContext, uiComponent, JSFAttr.IMAGE_ATTR);
if (image != null)
{
writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_IMAGE,
org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.TYPE_ATTR);
writer.writeURIAttribute(HTML.SRC_ATTR, image, org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.IMAGE_ATTR);
}
else
{
String type = getType(uiComponent);
if (type == null || (!reset && !button))
{
type = HTML.INPUT_TYPE_SUBMIT;
}
writer.writeAttribute(HTML.TYPE_ATTR, type, org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.TYPE_ATTR);
Object value = getValue(uiComponent);
if (value != null)
{
writer.writeAttribute(org.apache.myfaces.shared_tomahawk.renderkit.html.HTML.VALUE_ATTR, value,
org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.VALUE_ATTR);
}
}
if (javascriptAllowed &&
(HtmlRendererUtils.hasClientBehavior(ClientBehaviorEvents.CLICK, behaviors, facesContext) ||
HtmlRendererUtils.hasClientBehavior(ClientBehaviorEvents.ACTION, behaviors, facesContext)))
{
if (!reset && !button)
{
String onClick = buildBehaviorizedOnClick(
uiComponent, behaviors, facesContext, writer, formInfo, validParams);
if (onClick.length() != 0)
{
writer.writeAttribute(HTML.ONCLICK_ATTR, onClick.toString(), null);
}
}
else
{
Collection<ClientBehaviorContext.Parameter> paramList =
HtmlRendererUtils.getClientBehaviorContextParameters(
HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent));
String onClick = HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent,
ClientBehaviorEvents.CLICK, paramList, ClientBehaviorEvents.ACTION, paramList, behaviors,
commandOnclick , null);
if (onClick.length() != 0)
{
writer.writeAttribute(HTML.ONCLICK_ATTR, onClick.toString(), null);
}
}
Map<String, Object> attributes = uiComponent.getAttributes();
HtmlRendererUtils.buildBehaviorChain(
facesContext, uiComponent, ClientBehaviorEvents.DBLCLICK, null, behaviors,
(String) attributes.get(HTML.ONDBLCLICK_ATTR), "");
}
else if (javascriptAllowed)
{
//fallback into the pre 2.0 code to keep backwards compatibility with libraries which rely on internals
if (!reset && !button)
{
StringBuilder onClick = buildOnClick(uiComponent, facesContext, writer, validParams);
if (onClick.length() != 0)
{
writer.writeAttribute(HTML.ONCLICK_ATTR, onClick.toString(), null);
}
}
else
{
HtmlRendererUtils.renderHTMLStringAttribute(writer, uiComponent, HTML.ONCLICK_ATTR, HTML.ONCLICK_ATTR);
}
}
//if (javascriptAllowed)
//{
if (isCommonPropertiesOptimizationEnabled(facesContext))
{
CommonPropertyUtils.renderButtonPassthroughPropertiesWithoutDisabledAndEvents(writer,
CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
}
else
{
HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
HTML.BUTTON_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);
}
//}
if (behaviors != null && !behaviors.isEmpty())
{
HtmlRendererUtils.renderBehaviorizedEventHandlersWithoutOnclick(
facesContext, writer, uiComponent, behaviors);
HtmlRendererUtils.renderBehaviorizedFieldEventHandlers(facesContext, writer, uiComponent, behaviors);
}
else
{
if (isCommonPropertiesOptimizationEnabled(facesContext))
{
long commonPropertiesMarked = CommonPropertyUtils.getCommonPropertiesMarked(uiComponent);
CommonPropertyUtils.renderEventPropertiesWithoutOnclick(writer, commonPropertiesMarked, uiComponent);
CommonPropertyUtils.renderCommonFieldEventProperties(writer, commonPropertiesMarked, uiComponent);
}
else
{
HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
HTML.EVENT_HANDLER_ATTRIBUTES_WITHOUT_ONCLICK);
HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
HTML.COMMON_FIELD_EVENT_ATTRIBUTES);
}
}
if (isDisabled(facesContext, uiComponent))
{
writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE,
org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.DISABLED_ATTR);
}
if (isReadonly(facesContext, uiComponent))
{
writer.writeAttribute(HTML.READONLY_ATTR, Boolean.TRUE,
org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr.READONLY_ATTR);
}
writer.endElement(HTML.INPUT_ELEM);
if (formInfo != null)
{
HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(
formInfo.getForm(), facesContext, writer);
}
// render the UIParameter children of the commandButton (since 2.0)
/*
List<UIParameter> validParams = HtmlRendererUtils.getValidUIParameterChildren(