Class StandardHtmlTag

java.lang.Object
jakarta.servlet.jsp.tagext.TagSupport
com.randomnoun.common.webapp.taglib.StandardHtmlTag
All Implemented Interfaces:
jakarta.servlet.jsp.tagext.IterationTag, jakarta.servlet.jsp.tagext.JspTag, jakarta.servlet.jsp.tagext.Tag, Serializable
Direct Known Subclasses:
SelectTag

public abstract class StandardHtmlTag extends jakarta.servlet.jsp.tagext.TagSupport
This is an abstract taglib, which can be used to propagate standard HTML attributes through to a HTML page. It provides handlers for all the 'general' attributes that are present for most HTML tags (e.g. onclick, style, ...).

Other taglibs that are used to generate HTML elements (e.g. SelectTag), can extend this class to take advantage of this functionality.

Superclasses may override any method defined in this tag to provide their own special handling. The attributes handled by this tag are accesskey, styleClass, contenteditable, dir, disabled, lang, language, maxlength, size, style, title, width, onactivate, onafterupdate, onbeforeactvate, onbeforecut, onbeforedeactivate, onbeforeeditfocus, onbeforepaste, onbeforeupdate, onblur, onchange, onclick, oncontextmenu, oncontrolselect, oncut, ondblclick, ondeactivate, ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onerrorupdate, onfilterchange, onfocus, onfocusin, onfocusout, onhelp, onkeydown, onkeypress, onkeyup, onlosecapture, onmousedown, onmouseenter, onmouseleave, onmousemove, onmouseout, onmouseover, onmouseup, onmousewheel, onmove, onmoveend, onmovestart, onpaste, onpropertychange, onreadystatechange, onresize, onresizeend, onresizestart, onselect, onselectstart, ontimeerror, hidefocus, readonly, tabindex and unselectable.

Note that the HTML attribute 'class' is now called 'styleClass', since the Object.getClass() method interferes with standard JavaBean reflection.

All attributes are lower-case, except extraAttributes (see below).

Note that the attributes 'name', 'type' and 'value' are intentionally not on this list, as they would normally be generated by the specific tag libary itself.

The 'disabled' attributes has some special handling -- if it's set to the value "false", then the attribute is removed. This is due to IE treating 'disabled="false"' as actually disabling the control. Which is odd.

The IE-only attributes hidefocus, readonly, tabindex and unselectable are included on this list, because they seem reasonably useful. The IE-only attributes begin, end, datafld, datasrc, autocomplete, syncmasterm, timecontainer and vcard_name are not on this list, because they don't seem as useful. You can always add them if you think they're needed.

Values are EL-evaluated (so you can have JSTL-style ${xxxx} values).

Additional attributes can be expressed using the extraAttributes attribute, e.g. to put a non-standard attribute 'onmousewheelclick' into the element, you could use, for example:

 <mm:something extraAttribute="onmousewheelclick='doSomethingInJavascript()'" />
 

Any tag that extends this class should have the following text in it's .tld descriptor:

    <!-- Attributes understood by StandardHtmlTag -->
    <attribute><name>accesskey</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>styleClass</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>contenteditable</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>dir</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>disabled</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>lang</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>language</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>maxlength</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>size</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>style</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>title</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>width</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onactivate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onafterupdate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforeactvate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforecut</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforedeactivate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforeeditfocus</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforepaste</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onbeforeupdate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onblur</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onchange</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onclick</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>oncontextmenu</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>oncontrolselect</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>oncut</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondblclick</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondeactivate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondrag</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondragend</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondragenter</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondragleave</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondragover</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondragstart</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ondrop</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onerrorupdate</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onfilterchange</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onfocus</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onfocusin</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onfocusout</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onhelp</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onkeydown</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onkeypress</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onkeyup</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onlosecapture</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmousedown</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmouseenter</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmouseleave</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmousemove</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmouseout</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmouseover</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmouseup</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmousewheel</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmove</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmoveend</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onmovestart</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onpaste</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onpropertychange</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onreadystatechange</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onresize</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onresizeend</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onresizestart</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onselect</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>onselectstart</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>ontimeerror</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>hidefocus</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>readonly</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>tabindex</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>unselectable</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
    <attribute><name>extraAttributes</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute>
 
NB: Implementing classes MUST call getAttributes().clear(); in their doEnd() method, in case the JSP container decides to reuse taglib instances.
Author:
knoxg
See Also: