AbstractFormTag (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.web.servlet.tags.form

## Class AbstractFormTag

- java.lang.Object
- - javax.servlet.jsp.tagext.TagSupport
  - - org.springframework.web.servlet.tags.RequestContextAwareTag
    - - org.springframework.web.servlet.tags.HtmlEscapingAwareTag
      - - org.springframework.web.servlet.tags.form.AbstractFormTag

- All Implemented Interfaces:
    Serializable, IterationTag, JspTag, Tag, TryCatchFinally
  Direct Known Subclasses:
    AbstractDataBoundFormElementTag

      public abstract class AbstractFormTag
      extends HtmlEscapingAwareTag

  Base class for all JSP form tags. Provides utility methods for null-safe EL evaluation and for accessing and working with a `TagWriter`.

  Subclasses should implement the `writeTagContent(TagWriter)` to perform actual tag rendering.

  Subclasses (or test classes) can override the `createTagWriter()` method to redirect output to a `Writer` other than the `JspWriter` associated with the current `PageContext`.

  Since:
    2.0
  Author:
    Rob Harrop, Juergen Hoeller
  See Also:
    Serialized Form

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.servlet.tags.RequestContextAwareTag

      `logger, REQUEST_CONTEXT_PAGE_ATTRIBUTE`

    - ### Fields inherited from class javax.servlet.jsp.tagext.TagSupport

      `id, pageContext`

    - ### Fields inherited from interface javax.servlet.jsp.tagext.IterationTag

      `EVAL_BODY_AGAIN`

    - ### Fields inherited from interface javax.servlet.jsp.tagext.Tag

      `EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractFormTag()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected TagWriter` | `createTagWriter()` Create the `TagWriter` which all output will be written to.
    `protected int` | `doStartTagInternal()` Provide a simple template method that calls `createTagWriter()` and passes the created `TagWriter` to the `writeTagContent(TagWriter)` method.
    `protected Object` | `evaluate(String attributeName, Object value)` Evaluate the supplied value for the supplied attribute name.
    `protected boolean` | `evaluateBoolean(String attributeName, String value)` Evaluate the supplied value for the supplied attribute name.
    `protected String` | `getDisplayString(Object value)` Get the display value of the supplied `Object`, HTML escaped as required.
    `protected String` | `getDisplayString(Object value, PropertyEditor propertyEditor)` Get the display value of the supplied `Object`, HTML escaped as required.
    `protected boolean` | `isDefaultHtmlEscape()` Overridden to default to `true` in case of no explicit default given.
    `protected void` | `writeOptionalAttribute(TagWriter tagWriter, String attributeName, String value)` Optionally writes the supplied value under the supplied attribute name into the supplied `TagWriter`.
    `protected abstract int` | `writeTagContent(TagWriter tagWriter)` Subclasses should implement this method to perform tag content rendering.

    - ### Methods inherited from class org.springframework.web.servlet.tags.HtmlEscapingAwareTag

      `isHtmlEscape, setHtmlEscape`

    - ### Methods inherited from class org.springframework.web.servlet.tags.RequestContextAwareTag

      `doCatch, doFinally, doStartTag, getRequestContext`

    - ### Methods inherited from class javax.servlet.jsp.tagext.TagSupport

      `doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, release, removeValue, setId, setPageContext, setParent, setValue`

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

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

- - ### Constructor Detail

    - #### AbstractFormTag

          public AbstractFormTag()

  - ### Method Detail

    - #### evaluate

          protected Object evaluate(String attributeName,
                        Object value)
                             throws JspException

      Evaluate the supplied value for the supplied attribute name. If the supplied value is `null` then `null` is returned, otherwise evaluation is handled using `ExpressionEvaluationUtils.evaluate(String, String, javax.servlet.jsp.PageContext)`.
      Throws:
        `JspException`

    - #### evaluateBoolean

          protected boolean evaluateBoolean(String attributeName,
                                String value)
                                     throws JspException

      Evaluate the supplied value for the supplied attribute name. If the supplied value is `null` then `false` is returned, otherwise evaluation is handled using `ExpressionEvaluationUtils.evaluate(String, String, javax.servlet.jsp.PageContext)`, with subsequent matching against `Boolean.TRUE` and `Boolean.valueOf`.
      Throws:
        `JspException`

    - #### writeOptionalAttribute

          protected final void writeOptionalAttribute(TagWriter tagWriter,
                                    String attributeName,
                                    String value)
                                               throws JspException

      Optionally writes the supplied value under the supplied attribute name into the supplied `TagWriter`. In this case, the supplied value is `evaluated` first and then the `String representation` is written as the attribute value. If the resultant `String` representation is `null` or empty, no attribute is written.
      Throws:
        `JspException`
      See Also:
        `TagWriter.writeOptionalAttributeValue(String, String)`

    - #### createTagWriter

          protected TagWriter createTagWriter()

      Create the `TagWriter` which all output will be written to. By default, the `TagWriter` writes its output to the `JspWriter` for the current `PageContext`. Subclasses may choose to change the `Writer` to which output is actually written.

    - #### doStartTagInternal

          protected final int doStartTagInternal()
                                          throws Exception

      Provide a simple template method that calls `createTagWriter()` and passes the created `TagWriter` to the `writeTagContent(TagWriter)` method.
      Specified by:
        `doStartTagInternal` in class `RequestContextAwareTag`
      Returns:
        the value returned by `writeTagContent(TagWriter)`
      Throws:
        `Exception` - any exception, any checked one other than a JspException gets wrapped in a JspException by doStartTag
      See Also:
        `TagSupport.doStartTag()`

    - #### getDisplayString

          protected String getDisplayString(Object value)

      Get the display value of the supplied `Object`, HTML escaped as required. This version is not `PropertyEditor`-aware.

    - #### getDisplayString

          protected String getDisplayString(Object value,
                                PropertyEditor propertyEditor)

      Get the display value of the supplied `Object`, HTML escaped as required. If the supplied value is not a `String` and the supplied `PropertyEditor` is not null then the `PropertyEditor` is used to obtain the display value.

    - #### isDefaultHtmlEscape

          protected boolean isDefaultHtmlEscape()

      Overridden to default to `true` in case of no explicit default given.
      Overrides:
        `isDefaultHtmlEscape` in class `HtmlEscapingAwareTag`
      See Also:
        `RequestContextAwareTag.getRequestContext()`

    - #### writeTagContent

          protected abstract int writeTagContent(TagWriter tagWriter)
                                          throws JspException

      Subclasses should implement this method to perform tag content rendering.
      Returns:
        valid tag render instruction as per `Tag.doStartTag()`.
      Throws:
        `JspException`