Package org.zkoss.zul

## Class Menuitem

- java.lang.Object
- - org.zkoss.zk.ui.AbstractComponent
  - - org.zkoss.zk.ui.HtmlBasedComponent
    - - org.zkoss.zul.impl.XulElement
      - - org.zkoss.zul.impl.LabelElement
        - - org.zkoss.zul.impl.LabelImageElement
          - - org.zkoss.zul.Menuitem

- All Implemented Interfaces:
    `java.io.Serializable`, `java.lang.Cloneable`, `Component`, `Disable`, `Scope`, `Uploadable`, `ComponentCtrl`

      public class Menuitem
      extends LabelImageElement
      implements Disable, Uploadable

  A single choice in a `Menupopup` element. It acts much like a button but it is rendered on a menu.

  Default `getZclass()`: z-menuitem. (since 3.5.0)

  Author:
    tomyeh
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.zkoss.zul.impl.LabelImageElement

      `LabelImageElement.ExtraCtrl`

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

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

    - ### Nested classes/interfaces inherited from interface org.zkoss.zk.ui.ext.Uploadable

      `Uploadable.Error`

  - ### Field Summary

    - ### Fields inherited from class org.zkoss.zk.ui.HtmlBasedComponent

      `_zclass`

    - ### 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
    Constructor | Description
    --- | ---
    `Menuitem()` |
    `Menuitem​(java.lang.String label)` |
    `Menuitem​(java.lang.String label, java.lang.String src)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `beforeParentChanged​(Component parent)` | Default: If parent is null, execute the @Destroy method if any.
    `java.lang.Object` | `clone()` | Clones the component.
    `java.lang.String` | `getAutodisable()` | Returns a list of component IDs that shall be disabled when the user clicks this menuitem.
    `java.lang.String` | `getHref()` | Returns the href.
    `java.lang.String` | `getTarget()` | Returns the target frame or window.
    `java.lang.String` | `getUpload()` | Returns non-null if this component is used for file upload, or null otherwise.
    `java.lang.String` | `getValue()` | Returns the value.
    `java.lang.String` | `getZclass()` | Returns the ZK Cascading Style class for this component.
    `boolean` | `isAutocheck()` | Returns whether the menuitem check mark will update each time the menu item is selected.
    `boolean` | `isChecked()` | Returns whether it is checked.
    `boolean` | `isCheckmark()` | Returns whether the check mark shall be displayed in front of each item.
    `protected boolean` | `isChildable()` | Not childable.
    `boolean` | `isDisabled()` | Returns whether it is disabled.
    `boolean` | `isTopmost()` | Returns whether this is an top-level menu, i.e., not owning by another `Menupopup`.
    `protected void` | `renderCrawlable​(java.lang.String label)` | Renders the crawlable information.
    `protected void` | `renderProperties​(ContentRenderer renderer)` | Renders the content of this component, excluding the enclosing tags and children.
    `void` | `service​(AuRequest request, boolean everError)` | Processes an AU request.
    `void` | `setAutocheck​(boolean autocheck)` | Sets whether the menuitem check mark will update each time the menu item is selected.
    `void` | `setAutodisable​(java.lang.String autodisable)` | Sets a list of component IDs that shall be disabled when the user clicks this menuitem.
    `void` | `setChecked​(boolean checked)` | Sets whether it is checked.
    `void` | `setCheckmark​(boolean checkmark)` | Sets whether the check mark shall be displayed in front of each item.
    `void` | `setDisabled​(boolean disabled)` | Sets whether it is disabled.
    `void` | `setHref​(java.lang.String href)` | Sets the href.
    `void` | `setTarget​(java.lang.String target)` | Sets the target frame or window.
    `void` | `setUpload​(java.lang.String upload)` | Sets the JavaScript class at the client to handle the upload if this component is used for file upload.
    `void` | `setValue​(java.lang.String value)` | Sets the value.
    `protected void` | `updateByClient​(java.lang.String name, java.lang.Object value)` | Called when the widget running at the client asks the server to update a value.

    - ### Methods inherited from class org.zkoss.zul.impl.LabelImageElement

      `getExtraCtrl, getHoverImage, getHoverImageContent, getIconSclass, getIconSclasses, getIconTooltip, getIconTooltips, getImage, getImageContent, getPropertyAccess, isImageAssigned, setHoverImage, setHoverImageContent, setHoverImageContent, setIconSclass, setIconSclasses, setIconTooltip, setIconTooltips, setImage, setImageContent, setImageContent`

    - ### Methods inherited from class org.zkoss.zul.impl.LabelElement

      `getLabel, setLabel`

    - ### Methods inherited from class org.zkoss.zul.impl.XulElement

      `getContext, getCtrlKeys, getPopup, getTooltip, setContext, setContext, setContextAttributes, setCtrlKeys, setPopup, setPopup, setPopupAttributes, setTooltip, setTooltip, setTooltipAttributes`

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

      `addSclass, evalCSSFlex, focus, getAction, getClientAction, getDraggable, getDroppable, getHeight, getHflex, getLeft, getRenderdefer, getSclass, getStyle, getTabindex, getTabindexInteger, getTooltiptext, getTop, getVflex, getWidth, getZindex, getZIndex, removeSclass, removeSclass, setAction, setClass, setClientAction, setDraggable, setDroppable, setFocus, setHeight, setHeight0, setHeightDirectly, setHflex, setHflex0, setHflexDirectly, setLeft, setLeftDirectly, setRenderdefer, setSclass, setStyle, setTabindex, setTabindex, setTooltiptext, setTop, setTopDirectly, setVflex, setVflex0, setVflexDirectly, setWidth, setWidth0, setWidthDirectly, setZclass, setZindex, setZIndex, setZIndexDirectly`

    - ### 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, 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, getWidgetClass, 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, redraw, redrawChildren, removeAttribute, removeAttribute, removeAttribute, removeCallback, removeChild, removeEventListener, removeForward, removeForward, removeRedrawCallback, removeScopeListener, removeShadowRoot, render, render, render, renderPropertiesOnly, replace, response, response, response, service, sessionDidActivate, sessionWillPassivate, setAttribute, setAttribute, setAttribute, setAuService, setAutag, setClientAttribute, setClientDataAttribute, setDefinition, setDefinition, setId, setMold, setPage, setPageBefore, setParent, setStubonly, setStubonly, setSubBindingAnnotationCount, setTemplate, setVisible, setVisibleDirectly, setWidgetClass, setWidgetListener, setWidgetOverride, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdate, smartUpdateWidgetListener, smartUpdateWidgetOverride, toString, updateSubBindingAnnotationCount, willPassivate, willPassivate, willSerialize, willSerialize`

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

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

- - ### Constructor Detail

    - #### Menuitem

          public Menuitem()

    - #### Menuitem

          public Menuitem​(java.lang.String label)

    - #### Menuitem

          public Menuitem​(java.lang.String label,
                          java.lang.String src)

  - ### Method Detail

    - #### isCheckmark

          public boolean isCheckmark()

      Returns whether the check mark shall be displayed in front of each item.

      Default: false.

      Since:
        3.5.0

    - #### setCheckmark

          public void setCheckmark​(boolean checkmark)

      Sets whether the check mark shall be displayed in front of each item.

      Note the checkbox can be checked only if `isAutocheck()` is true

      Since:
        3.5.0

    - #### getZclass

          public java.lang.String getZclass()

      Description copied from class: `HtmlBasedComponent`
      Returns the ZK Cascading Style class for this component. It usually depends on the implementation of the mold (`AbstractComponent.getMold()`).

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

      `HtmlBasedComponent.setZclass(java.lang.String)`) will completely replace the default style of a component. In other words, the default style of a component is associated with the default value of `HtmlBasedComponent.getZclass()`. Once it is changed, the default style won't be applied at all. If you want to perform small adjustments, use `HtmlBasedComponent.setSclass(java.lang.String)` instead.

      Overrides:
        `getZclass` in class `HtmlBasedComponent`
      See Also:
        `HtmlBasedComponent.getSclass()`

    - #### setDisabled

          public void setDisabled​(boolean disabled)

      Sets whether it is disabled.
      Specified by:
        `setDisabled` in interface `Disable`
      Since:
        3.0.1

    - #### isDisabled

          public boolean isDisabled()

      Returns whether it is disabled.

      Default: false.

      Specified by:
        `isDisabled` in interface `Disable`
      Since:
        3.0.1

    - #### getAutodisable

          public java.lang.String getAutodisable()

      Returns a list of component IDs that shall be disabled when the user clicks this menuitem.
      Since:
        5.0.7

    - #### setAutodisable

          public void setAutodisable​(java.lang.String autodisable)

      Sets a list of component IDs that shall be disabled when the user clicks this menuitem.

      To represent the menuitem itself, the developer can specify `self`. For example, `<menuitem id="ok" autodisable="self,cancel"/>` is the same as `<menuitem id="ok" autodisable="ok,cancel"/>` that will disable both the ok and cancel menuitem when an user clicks it.

      The menuitem being disabled will be enabled automatically once the client receives a response from the server. In other words, the server doesn't notice if a menuitem is disabled with this method.

      However, if you prefer to enable them later manually, you can prefix with '+'. For example, `<menuitem id="ok" autodisable="+self,+cancel"/>`

      Then, you have to enable them manually such as

          if (something_happened){
            ok.setDisabled(false);
            cancel.setDisabled(false);

      Default: null.

      Since:
        5.0.7

    - #### getValue

          public java.lang.String getValue()

      Returns the value.

      Default: "".

    - #### setValue

          public void setValue​(java.lang.String value)

      Sets the value.

    - #### isChecked

          public boolean isChecked()

      Returns whether it is checked.

      Default: false.

    - #### setChecked

          public void setChecked​(boolean checked)

      Sets whether it is checked.

      This only applies when `isCheckmark()` = true. (since 3.5.0)

    - #### isAutocheck

          public boolean isAutocheck()

      Returns whether the menuitem check mark will update each time the menu item is selected.

      Default: false.

    - #### setAutocheck

          public void setAutocheck​(boolean autocheck)

      Sets whether the menuitem check mark will update each time the menu item is selected.

      This only applies when `isCheckmark()` = true. (since 3.5.0)

    - #### getHref

          public java.lang.String getHref()

      Returns the href.

      Default: null. If null, the button has no function unless you specify the onClick handler.

    - #### setHref

          public void setHref​(java.lang.String href)
                       throws WrongValueException

      Sets the href.
      Throws:
        `WrongValueException`

    - #### getTarget

          public java.lang.String getTarget()

      Returns the target frame or window.

      Note: it is useful only if href (`setHref(java.lang.String)`) is specified (i.e., use the onClick listener).

      Default: null.

    - #### setTarget

          public void setTarget​(java.lang.String target)

      Sets the target frame or window.
      Parameters:
        `target` - the name of the frame or window to hyperlink.

    - #### isTopmost

          public boolean isTopmost()

      Returns whether this is an top-level menu, i.e., not owning by another `Menupopup`.

    - #### getUpload

          public java.lang.String getUpload()

      Description copied from interface: `Uploadable`
      Returns non-null if this component is used for file upload, or null otherwise. Refer to `Uploadable.setUpload(java.lang.String)` for more details.
      Specified by:
        `getUpload` in interface `Uploadable`

    - #### setUpload

          public void setUpload​(java.lang.String upload)

      Description copied from interface: `Uploadable`
      Sets the JavaScript class at the client to handle the upload if this component is used for file upload.

      Default: null.

      For example, the following example declares a button for file upload:

          <button label="Upload" upload="true"
           onUpload="handle(event.media)"/>

      As shown above, after the file is uploaded, an instance of `UploadEvent` is sent this component.

      If you want to customize the handling of the file upload at the client, you can specify a JavaScript class when calling this method: `<button upload="foo.Upload"/>`

      Another options for the upload can be specified as follows:

          <button label="Upload" upload="true,maxsize=-1,multiple=true,accept=audio/*|video/*|image/*,native"

      - maxsize: the maximal allowed upload size of the component, in kilobytes, or a negative value if no limit, if the maxsize is not specified, it will use `Configuration.getMaxUploadSize()`
      - native: treating the uploaded file(s) as binary, i.e., not to convert it to image, audio or text files.
      - multiple: treating the file chooser allows multiple files to upload, the setting only works with HTML5 supported browsers (since ZK 6.0.0).
      - accept: specifies the types of files that the server accepts, the setting only works with HTML5 supported browsers (since ZK 7.0.0).
      - suppressedErrors: specifies the suppressed uploading errors, separated by `|` (e.g. missing-required-component|illegal-upload) (since ZK 9.5.1).

      Note: if the options of the `false` or the customized handler (like `foo.Upload`) are not specified, the option of `true` is implicit by default.

      Specified by:
        `setUpload` in interface `Uploadable`
      Parameters:
        `upload` - a JavaScript class to handle the file upload at the client, or "true" if the default class is used, or null or "false" to disable the file download (and then this button behaves like a normal button).
      See Also:
        `Uploadable.Error`

    - #### beforeParentChanged

          public void beforeParentChanged​(Component parent)

      Description copied from class: `AbstractComponent`
      Default: If parent is null, execute the @Destroy method if any.
      Specified by:
        `beforeParentChanged` in interface `ComponentCtrl`
      Overrides:
        `beforeParentChanged` in class `AbstractComponent`
      Parameters:
        `parent` - the new parent. If null, it means detachment.
      See Also:
        `ComponentCtrl.beforeParentChanged(org.zkoss.zk.ui.Component)`

    - #### 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 `LabelImageElement`
      Returns:
        the new component. Notice that it doesn't belong to any page, nor desktop. It doesn't have a parent, either.

    - #### isChildable

          protected boolean isChildable()

      Not childable.
      Overrides:
        `isChildable` in class `AbstractComponent`

    - #### renderProperties

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

      Description copied from class: `HtmlBasedComponent`
      Renders the content of this component, excluding the enclosing tags and children.

      See also ZK Client-side Reference: Property Rendering

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

    - #### renderCrawlable

          protected void renderCrawlable​(java.lang.String label)
                                  throws java.io.IOException

      Description copied from class: `LabelElement`
      Renders the crawlable information. It is called by `LabelElement.renderProperties(org.zkoss.zk.ui.sys.ContentRenderer)`, and designed to be overridden if the deriving class wants to generate it differently.

      Default: `org.zkoss.zul.impl.Utils.renderCrawlableText(label)`

      Overrides:
        `renderCrawlable` in class `LabelElement`
      Throws:
        `java.io.IOException`

    - #### service

          public void service​(AuRequest request,
                              boolean everError)

      Processes an AU request.

      Default: in addition to what are handled by `HtmlBasedComponent.service(org.zkoss.zk.au.AuRequest, boolean)`, it also handles onCheck.

      Specified by:
        `service` in interface `ComponentCtrl`
      Overrides:
        `service` in class `HtmlBasedComponent`
        `everError` - whether any error ever occurred before processing this request.
      Since:
        5.0.0
      See Also:
        `AbstractComponent.setAuService(org.zkoss.zk.au.AuService)`

    - #### updateByClient

          protected void updateByClient​(java.lang.String name,
                                        java.lang.Object value)

      Description copied from class: `AbstractComponent`
      Called when the widget running at the client asks the server to update a value. The update is caused by an AU request named `setAttr` (by invoking zk.Widget's smartUpdate at client).

      By default, it does nothing but log a warning message, since it is not safe to allow the client to update a field arbitrary.

      However, if you'd like to allow the update for a particular component you could do one of the following

      1. For component developers: override this method to update the field directly. For example,

             protected void updateByClient(String name, Object value) {
                     if ("disabled".equals(name))
                             setDisabled(name, ((Boolean)value).booleanValue());
                     else
                             super.updateByClient(name, value);

      2. For application developers: set an attribute called `org.zkoss.zk.ui.updateByClient` to be true. Then, this method will use reflection to find out the setter to update the value. Nothing happens if the method is not found.

      Notice: this method will invoke `AbstractComponent.disableClientUpdate(boolean)` to disable any update to the client, when calling the setter.

      If you want to enable the client update for all instances of a given component (though not recommended for the security reason), you could refer to here.

      See also zk.Widget.smartUpdate().

      Overrides:
        `updateByClient` in class `AbstractComponent`