in impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java [115:275]
public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException
{
RendererUtils.checkParamValidity(facesContext, uiComponent, UICommand.class);
String clientId = uiComponent.getClientId(facesContext);
ResponseWriter writer = facesContext.getResponseWriter();
// commandButton does not need to be nested in a form since Faces 2.0
UIForm form = ComponentUtils.findClosest(UIForm.class, uiComponent);
boolean reset = isReset(uiComponent);
boolean button = isButton(uiComponent);
Map<String, List<ClientBehavior>> behaviors = null;
if (uiComponent instanceof ClientBehaviorHolder holder)
{
behaviors = holder.getClientBehaviors();
if (!behaviors.isEmpty())
{
ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
}
}
List<UIParameter> validParams = HtmlRendererUtils.getValidUIParameterChildren(
facesContext, getChildren(uiComponent), false, false);
if (form != null && (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, ComponentAttrs.ID_ATTR);
writer.writeAttribute(HTML.NAME_ATTR, clientId, ComponentAttrs.ID_ATTR);
String image = RendererUtils.getIconSrc(facesContext, uiComponent, ComponentAttrs.IMAGE_ATTR);
if (image != null)
{
writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_IMAGE, ComponentAttrs.TYPE_ATTR);
writer.writeURIAttribute(HTML.SRC_ATTR, image, ComponentAttrs.IMAGE_ATTR);
}
else
{
String type = getType(uiComponent);
if (type == null || (!reset && !button))
{
type = HTML.INPUT_TYPE_SUBMIT;
}
writer.writeAttribute(HTML.TYPE_ATTR, type, ComponentAttrs.TYPE_ATTR);
Object value = getValue(uiComponent);
if (value != null)
{
writer.writeAttribute(HTML.VALUE_ATTR, value, ComponentAttrs.VALUE_ATTR);
}
}
if (ClientBehaviorRendererUtils.hasClientBehavior(ClientBehaviorEvents.CLICK, behaviors)
|| ClientBehaviorRendererUtils.hasClientBehavior(ClientBehaviorEvents.ACTION, behaviors))
{
if (!reset && !button)
{
String onClick = buildBehaviorizedOnClick(uiComponent, behaviors, facesContext, writer,
form, validParams);
if (onClick.length() != 0)
{
writer.writeAttribute(HTML.ONCLICK_ATTR, onClick, null);
}
}
else
{
Collection<ClientBehaviorContext.Parameter> paramList =
ClientBehaviorRendererUtils.getClientBehaviorContextParameters(
HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent));
String onClick = ClientBehaviorRendererUtils.buildBehaviorChain(facesContext, uiComponent,
ClientBehaviorEvents.CLICK, paramList, ClientBehaviorEvents.ACTION, paramList, behaviors,
commandOnclick , null);
if (onClick.length() != 0)
{
writer.writeAttribute(HTML.ONCLICK_ATTR, onClick, null);
}
}
Map<String, Object> attributes = uiComponent.getAttributes();
ClientBehaviorRendererUtils.buildBehaviorChain(facesContext, uiComponent, ClientBehaviorEvents.DBLCLICK,
null, behaviors, (String) attributes.get(HTML.ONDBLCLICK_ATTR), "");
}
else
{
//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 (isCommonPropertiesOptimizationEnabled(facesContext))
{
CommonHtmlAttributesUtil.renderButtonPassthroughPropertiesWithoutDisabledAndEvents(writer,
CommonHtmlAttributesUtil.getMarkedAttributes(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 commonAttributesMarked = CommonHtmlAttributesUtil.getMarkedAttributes(uiComponent);
CommonHtmlAttributesUtil.renderEventPropertiesWithoutOnclick(writer,
commonAttributesMarked, uiComponent);
CommonHtmlAttributesUtil.renderCommonFieldEventProperties(writer,
commonAttributesMarked, 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, HTML.DISABLED_ATTR, ComponentAttrs.DISABLED_ATTR);
}
if (isReadonly(facesContext, uiComponent))
{
writer.writeAttribute(HTML.READONLY_ATTR, HTML.READONLY_ATTR, ComponentAttrs.READONLY_ATTR);
}
}