Package org.zkoss.zhtml.impl

## Class AbstractTag

- java.lang.Object
- - org.zkoss.zk.ui.AbstractComponent
  - - org.zkoss.zhtml.impl.AbstractTag

- All Implemented Interfaces:
    `java.io.Serializable`, `java.lang.Cloneable`, `Component`, `DynamicPropertied`, `RawId`, `Scope`, `ComponentCtrl`
  Direct Known Subclasses:
    `A`, `Abbr`, `Address`, `Area`, `Article`, `Aside`, `Audio`, `B`, `Base`, `Bdi`, `Bdo`, `Blockquote`, `Body`, `Br`, `Button`, `Canvas`, `Caption`, `Cite`, `Code`, `Col`, `Colgroup`, `ContentTag`, `Data`, `Datalist`, `Dd`, `Del`, `Details`, `Dfn`, `Dialog`, `Div`, `Dl`, `Dt`, `Em`, `Embed`, `Fieldset`, `Figcaption`, `Figure`, `Footer`, `Form`, `H1`, `H2`, `H3`, `H4`, `H5`, `H6`, `Head`, `Header`, `Hgroup`, `Hr`, `Html`, `I`, `Iframe`, `Img`, `Input`, `Ins`, `Kbd`, `Label`, `Legend`, `Li`, `Link`, `Main`, `Map`, `Mark`, `Menu`, `Meta`, `Meter`, `Nav`, `Noscript`, `Object`, `Ol`, `Optgroup`, `Option`, `Output`, `P`, `Picture`, `Pre`, `Progress`, `Q`, `Raw`, `Rp`, `Rt`, `Ruby`, `S`, `Samp`, `Section`, `Select`, `Slot`, `Small`, `Source`, `Span`, `Strong`, `Sub`, `Summary`, `Sup`, `Table`, `Tbody`, `Td`, `Template`, `Tfoot`, `Th`, `Thead`, `Time`, `Title`, `Tr`, `Track`, `U`, `Ul`, `Var`, `Video`, `Wbr`

      public class AbstractTag
      extends AbstractComponent
      implements DynamicPropertied, RawId

  The raw component used to generate raw HTML elements.

  Note: ZHTML components ignore the page listener since it handles non-deferrable event listeners (see `Deferrable`).

  Author:
    tomyeh
  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `AbstractTag.ExtraCtrl` |

    - ### Nested classes/interfaces inherited from class org.zkoss.zk.ui.AbstractComponent

      `AbstractComponent.Children, AbstractComponent.ForwardInfo, AbstractComponent.TargetInfo`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected java.lang.String` | `_tagnm` | The tag name.

    - ### Fields inherited from interface org.zkoss.zk.ui.Component

      `APPLICATION_SCOPE, COMPONENT_SCOPE, DESKTOP_SCOPE, PAGE_SCOPE, REQUEST_SCOPE, SESSION_SCOPE, SPACE_SCOPE`

    - ### Fields inherited from interface org.zkoss.zk.ui.sys.ComponentCtrl

      `AFTER_CHILD_ADDED, AFTER_CHILD_REMOVED, AFTER_CLONED, AFTER_PAGE_ATTACHED, AFTER_PAGE_DETACHED, AFTER_PARENT_CHANGED, CE_BUSY_IGNORE, CE_DUPLICATE_IGNORE, CE_IMPORTANT, CE_NON_DEFERRABLE, CE_REPEAT_IGNORE`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `AbstractTag()` |
    `protected` | `AbstractTag​(java.lang.String tagname)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `clone()` | Clones the component.
    `java.lang.String` | `getAccesskey()` | Returns the accesskey of this tag.
    `java.lang.String` | `getDir()` | Returns the dir of this tag.
    `java.util.Map<java.lang.String,​java.lang.Object>` | `getDynamicProperties()` | Returns all available dynamic properties.
    `java.lang.Object` | `getDynamicProperty​(java.lang.String name)` | Returns the dynamic property, or null if not found.
    `java.lang.Object` | `getExtraCtrl()` | Returns the extra controls that tell ZK how to handle this component specially.
    `java.lang.String` | `getLang()` | Returns the lang of this tag.
    `PropertyAccess` | `getPropertyAccess​(java.lang.String prop)` | Returns the corresponding property access object from the given property name, if any.
    `java.lang.String` | `getSclass()` | Returns the CSS class.
    `java.lang.String` | `getStyle()` | Returns the CSS style.
    `java.lang.Integer` | `getTabindex()` | Returns the tabindex of this tag.
    `java.lang.String` | `getTag()` | Returns the tag name.
    `java.lang.String` | `getTitle()` | Returns the title of this tag.
    `java.lang.String` | `getWidgetClass()` | Returns the widget class, "zhtml.Widget".
    `boolean` | `hasDynamicProperty​(java.lang.String name)` | Returns whether a dynamic property is defined.
    `protected boolean` | `isChildable()` | Returns whether this component can have a child.
    `boolean` | `isContenteditable()` | Returns the contenteditable of this tag.
    `boolean` | `isDraggable()` | Returns the draggable of this tag.
    `boolean` | `isHidden()` | Returns the hidden of this tag.
    `protected boolean` | `isOrphanTag()` | Returns whether this tag is an orphan tag, i.e., it shall be in the form of <tag/>.
    `boolean` | `isSpellcheck()` | Returns the spellcheck of this tag.
    `void` | `redraw​(java.io.Writer out)` | Redraws this component and all its descendants.
    `protected void` | `redrawChildrenDirectly​(TagRenderContext rc, Execution exec, java.io.Writer out)` | Renders the children directly to the given output.
    `protected void` | `renderProperties​(ContentRenderer renderer)` | Called by (`ComponentCtrl.redraw(java.io.Writer)`) to render the properties, excluding the enclosing tag and children.
    `void` | `setAccesskey​(java.lang.String accesskey)` | Sets the accesskey of this tag.
    `void` | `setContenteditable​(boolean contenteditable)` | Sets the contenteditable of this tag.
    `void` | `setDir​(java.lang.String dir)` | Sets the dir of this tag.
    `void` | `setDraggable​(boolean draggable)` | Sets the draggable of this tag.
    `void` | `setDynamicProperty​(java.lang.String name, java.lang.Object value)` | Sets the dynamic property.
    `void` | `setHidden​(boolean hidden)` | Sets the hidden of this tag.
    `void` | `setLang​(java.lang.String lang)` | Sets the lang of this tag.
    `void` | `setSclass​(java.lang.String sclass)` | Sets the CSS class.
    `void` | `setSpellcheck​(boolean spellcheck)` | Sets the spellcheck of this tag.
    `void` | `setStyle​(java.lang.String style)` | Sets the CSS style.
    `void` | `setTabindex​(java.lang.Integer tabindex)` | Sets the tabindex of this tag.
    `void` | `setTitle​(java.lang.String title)` | Sets the title of this tag.
    `boolean` | `setVisible​(boolean visible)` | Changes the visibility of this component.
    `protected boolean` | `shallHideId()` | Whether to hide the id attribute.
    `java.lang.String` | `toString()` |

    - ### Methods inherited from class org.zkoss.zk.ui.AbstractComponent

      `addAnnotation, addCallback, addClientEvent, addEventHandler, addEventListener, addEventListener, addForward, addForward, addForward, addForward, addMoved, addRedrawCallback, addScopeListener, addShadowRoot, addShadowRootBefore, addSharedEventHandlerMap, appendChild, applyProperties, beforeChildAdded, beforeChildRemoved, beforeParentChanged, destroyIndexCacheMap, detach, didActivate, didActivate, didDeserialize, didDeserialize, disableBindingAnnotation, disableClientUpdate, disableHostChanged, enableBindingAnnotation, enableHostChanged, getAnnotatedProperties, getAnnotatedPropertiesBy, getAnnotation, getAnnotations, getAnnotations, getAttribute, getAttribute, getAttribute, getAttributeOrFellow, getAttributes, getAttributes, getAuService, getAutag, getCallback, getChildren, getClientAttribute, getClientDataAttribute, getClientEvents, getDefaultMold, getDefinition, getDesktop, getEventHandler, getEventHandlerNames, getEventListenerMap, getEventListeners, getFellow, getFellow, getFellowIfAny, getFellowIfAny, getFellows, getFirstChild, getForwards, getId, getIndexCacheMap, getLastChild, getMold, getNextSibling, getPage, getParent, getPreviousSibling, getRedrawCallback, getRoot, getShadowFellowIfAny, getShadowRoots, getShadowVariable, getShadowVariable, getShadowVariable0, getSpaceOwner, getSpecialRendererOutput, getStubonly, getSubBindingAnnotationCount, getTemplate, getTemplateNames, getUuid, getWidgetAttributeNames, getWidgetListener, getWidgetListenerNames, getWidgetOverride, getWidgetOverrideNames, hasAttribute, hasAttribute, hasAttribute, hasAttributeOrFellow, hasBindingAnnotation, hasFellow, hasFellow, hasSubBindingAnnotation, initIndexCacheMap, insertBefore, invalidate, isDisabledHostChanged, isInitialized, isInvalidated, isListenerAvailable, isVisible, onChildAdded, onChildRemoved, onPageAttached, onPageDetached, onParentChanged, onWrongValue, query, queryAll, redrawChildren, removeAttribute, removeAttribute, removeAttribute, removeCallback, removeChild, removeEventListener, removeForward, removeForward, removeRedrawCallback, removeScopeListener, removeShadowRoot, render, render, render, renderPropertiesOnly, replace, response, response, response, service, service, sessionDidActivate, sessionWillPassivate, setAttribute, setAttribute, setAttribute, setAuService, setAutag, setClientAttribute, setClientDataAttribute, setDefinition, setDefinition, setId, setMold, setPage, setPageBefore, setParent, setStubonly, setStubonly, setSubBindingAnnotationCount, setTemplate, setVisibleDirectly, setWidgetClass, setWidgetListener, setWidgetOverride, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdateWidgetListener, smartUpdateWidgetOverride, updateByClient, updateSubBindingAnnotationCount, willPassivate, willPassivate, willSerialize, willSerialize`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### _tagnm

          protected java.lang.String _tagnm

      The tag name.

  - ### Constructor Detail

    - #### AbstractTag

          protected AbstractTag​(java.lang.String tagname)

    - #### AbstractTag

          protected AbstractTag()

  - ### Method Detail

    - #### getSclass

          public java.lang.String getSclass()

      Returns the CSS class. Due to Java's limitation, we cannot use the name called getClas.

      Default: null (the default value depends on element).

    - #### setSclass

          public void setSclass​(java.lang.String sclass)

      Sets the CSS class.

    - #### getStyle

          public java.lang.String getStyle()

      Returns the CSS style.

      Default: null.

    - #### setStyle

          public void setStyle​(java.lang.String style)

      Sets the CSS style.

      Note: if display is not specified as part of style, the returned value of `AbstractComponent.isVisible()` is assumed. In other words, if not visible and display is not specified as part of style, "display:none" is appended.

      On the other hand, if display is specified, then `setVisible(boolean)` is called to reflect the visibility, if necessary.

    - #### getAccesskey

          public java.lang.String getAccesskey()

      Returns the accesskey of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setAccesskey

          public void setAccesskey​(java.lang.String accesskey)
                            throws WrongValueException

      Sets the accesskey of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### isContenteditable

          public boolean isContenteditable()

      Returns the contenteditable of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setContenteditable

          public void setContenteditable​(boolean contenteditable)
                                  throws WrongValueException

      Sets the contenteditable of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### getDir

          public java.lang.String getDir()

      Returns the dir of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setDir

          public void setDir​(java.lang.String dir)
                      throws WrongValueException

      Sets the dir of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### isDraggable

          public boolean isDraggable()

      Returns the draggable of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setDraggable

          public void setDraggable​(boolean draggable)
                            throws WrongValueException

      Sets the draggable of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### isHidden

          public boolean isHidden()

      Returns the hidden of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setHidden

          public void setHidden​(boolean hidden)
                         throws WrongValueException

      Sets the hidden of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### getLang

          public java.lang.String getLang()

      Returns the lang of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setLang

          public void setLang​(java.lang.String lang)
                       throws WrongValueException

      Sets the lang of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### isSpellcheck

          public boolean isSpellcheck()

      Returns the spellcheck of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setSpellcheck

          public void setSpellcheck​(boolean spellcheck)
                             throws WrongValueException

      Sets the spellcheck of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### getTabindex

          public java.lang.Integer getTabindex()

      Returns the tabindex of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setTabindex

          public void setTabindex​(java.lang.Integer tabindex)
                           throws WrongValueException

      Sets the tabindex of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### getTitle

          public java.lang.String getTitle()

      Returns the title of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Since:
        8.0.3

    - #### setTitle

          public void setTitle​(java.lang.String title)
                        throws WrongValueException

      Sets the title of this tag.

      Notice that this attribute refers to the corresponding attribute of the HTML5 specification. Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.

      Throws:
        `WrongValueException`
      Since:
        8.0.3

    - #### getTag

          public java.lang.String getTag()

      Returns the tag name.

    - #### hasDynamicProperty

          public boolean hasDynamicProperty​(java.lang.String name)

      Description copied from interface: `DynamicPropertied`
      Returns whether a dynamic property is defined.
      Specified by:
        `hasDynamicProperty` in interface `DynamicPropertied`

    - #### getDynamicProperties

          public java.util.Map<java.lang.String,​java.lang.Object> getDynamicProperties()

      Description copied from interface: `DynamicPropertied`
      Returns all available dynamic properties.
      Specified by:
        `getDynamicProperties` in interface `DynamicPropertied`

    - #### getDynamicProperty

          public java.lang.Object getDynamicProperty​(java.lang.String name)

      Returns the dynamic property, or null if not found. Note: it must be a String object or null.
      Specified by:
        `getDynamicProperty` in interface `DynamicPropertied`

    - #### setDynamicProperty

          public void setDynamicProperty​(java.lang.String name,
                                         java.lang.Object value)
                                  throws WrongValueException

      Sets the dynamic property. Note: it converts the value to a string object (by use of `Objects.toString(java.lang.Object)`).

      Note: it handles the style property specially. Refer to `setStyle(java.lang.String)` for details.

      Specified by:
        `setDynamicProperty` in interface `DynamicPropertied`
      Throws:
        `WrongValueException`

    - #### shallHideId

          protected boolean shallHideId()

      Whether to hide the id attribute.

      Default: false.

      Some tags, such as `Html`, won't generate the id attribute. They shall override this method to return true.

    - #### setVisible

          public boolean setVisible​(boolean visible)

      Changes the visibility of this component.

      Note: it will adjust the style (`getStyle()`) based on the visibility.

      Specified by:
        `setVisible` in interface `Component`
      Overrides:
        `setVisible` in class `AbstractComponent`
      Returns:
        the previous visibility

    - #### getWidgetClass

          public java.lang.String getWidgetClass()

      Returns the widget class, "zhtml.Widget".
      Specified by:
        `getWidgetClass` in interface `Component`
      Overrides:
        `getWidgetClass` in class `AbstractComponent`
      Since:
        5.0.0
      See Also:
        `Component.setWidgetClass(java.lang.String)`

    - #### redraw

          public void redraw​(java.io.Writer out)
                      throws java.io.IOException

      Description copied from class: `AbstractComponent`
      Redraws this component and all its descendants.

      Default: It uses `JsContentRenderer` to render all information in JavaScript codes. For devices that don't support JavaScript, it must override this method.

      To generate all information, it first invokes `AbstractComponent.renderProperties(org.zkoss.zk.ui.sys.ContentRenderer)` to render component's properties, and then `AbstractComponent.redrawChildren(java.io.Writer)` to redraw children (and descendants) (by calling their `AbstractComponent.redraw(java.io.Writer)`).

      If a derived class wants to render more properties, it can override `AbstractComponent.renderProperties(org.zkoss.zk.ui.sys.ContentRenderer)`.

      If a derived class renders only a subset of its children (such as paging/cropping), it could override `AbstractComponent.redrawChildren(java.io.Writer)`.

      If a deriving class wants to do something before `AbstractComponent.renderProperties(org.zkoss.zk.ui.sys.ContentRenderer)`, it has to override `AbstractComponent.redraw(java.io.Writer)`.

      If a deriving class doesn't want to render in JavaScript codes, it has to override `AbstractComponent.redraw(java.io.Writer)` with the proper implementation of `ContentRenderer`.

      Specified by:
        `redraw` in interface `ComponentCtrl`
      Overrides:
        `redraw` in class `AbstractComponent`
      Throws:
        `java.io.IOException`

    - #### redrawChildrenDirectly

          protected void redrawChildrenDirectly​(TagRenderContext rc,
                                                Execution exec,
                                                java.io.Writer out)
                                         throws java.io.IOException

      Renders the children directly to the given output. Notice it is called only if `redraw(java.io.Writer)` is going to render the content (HTML tags) directly. If it is about to generate the JavaScript code `AbstractComponent.redrawChildren(java.io.Writer)` will be called instead.

      You have to override this method if the deriving class has additional information to render.

      Throws:
        `java.io.IOException`
      Since:
        5.0.7

    - #### renderProperties

          protected void renderProperties​(ContentRenderer renderer)
                                   throws java.io.IOException

      Description copied from class: `AbstractComponent`
      Called by (`ComponentCtrl.redraw(java.io.Writer)`) to render the properties, excluding the enclosing tag and children.

      Default: it renders `AbstractComponent.getId()` if it was assigned, and event names if listened (and listed in `AbstractComponent.getClientEvents()`).

      Note: it doesn't render `AbstractComponent.getWidgetClass()`, `AbstractComponent.getUuid()` and `AbstractComponent.getMold()`, which are caller's job.

      Overrides:
        `renderProperties` in class `AbstractComponent`
      Throws:
        `java.io.IOException`

    - #### isChildable

          protected boolean isChildable()

      Description copied from class: `AbstractComponent`
      Returns whether this component can have a child.

      Default: return true (means it can have children).

      Overrides:
        `isChildable` in class `AbstractComponent`

    - #### isOrphanTag

          protected boolean isOrphanTag()

      Returns whether this tag is an orphan tag, i.e., it shall be in the form of <tag/>.
      Since:
        5.0.8

    - #### getPropertyAccess

          public PropertyAccess getPropertyAccess​(java.lang.String prop)

      Description copied from interface: `ComponentCtrl`
      Returns the corresponding property access object from the given property name, if any.
      Specified by:
        `getPropertyAccess` in interface `ComponentCtrl`
      Overrides:
        `getPropertyAccess` in class `AbstractComponent`
      Parameters:
        `prop` - the name of the property
      Returns:
        null it means not to support for the property name.

    - #### clone

          public java.lang.Object clone()

      Description copied from interface: `Component`
      Clones the component. All of its children and descendants are cloned. Also, ID are preserved.
      Specified by:
        `clone` in interface `Component`
      Overrides:
        `clone` in class `AbstractComponent`
      Returns:
        the new component. Notice that it doesn't belong to any page, nor desktop. It doesn't have a parent, either.

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `AbstractComponent`

    - #### getExtraCtrl

          public java.lang.Object getExtraCtrl()

      Description copied from class: `AbstractComponent`
      Returns the extra controls that tell ZK how to handle this component specially. It is used only by component developers.

      Default: null.

      Specified by:
        `getExtraCtrl` in interface `ComponentCtrl`
      Overrides:
        `getExtraCtrl` in class `AbstractComponent`
      Returns:
        null if no special handling required. If the component requires some special controls, it could return an object that implements one or several interfaces in the org.zkoss.zk.ui.ext.render package. For example, `Cropper`.
      See Also:
        `ComponentCtrl.getExtraCtrl()`