Package org.springframework.web.servlet.tags.form

# Class AbstractFormTag

java.lang.Object
jakarta.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:
  `IterationTag`, `JspTag`, `Tag`, `TryCatchFinally`, `Serializable`

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 jakarta.servlet.jsp.tagext.TagSupport

`id, pageContext`

### Fields inherited from interface jakarta.servlet.jsp.tagext.IterationTag

`EVAL_BODY_AGAIN`

### Fields inherited from interface jakarta.servlet.jsp.tagext.Tag

`EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE`

## Constructor Summary

Constructors
Constructor
Description
`AbstractFormTag()`

## Method Summary

Modifier and Type
Method
Description
`protected TagWriter`
`createTagWriter()`
Create the `TagWriter` which all output will be written to.
`protected final 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 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 final 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

`htmlEscape, isHtmlEscape, isResponseEncodedHtmlEscape, setHtmlEscape`

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

`doCatch, doFinally, doStartTag, getRequestContext`

### Methods inherited from class jakarta.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 Details

### AbstractFormTag

public AbstractFormTag()

## Method Details

### evaluate

@Nullable protected Object evaluate(String attributeName, @Nullable Object value) throws JspException
Evaluate the supplied value for the supplied attribute name.

The default implementation simply returns the given value as-is.

Throws:
  `JspException`

### writeOptionalAttribute

protected final void writeOptionalAttribute(TagWriter tagWriter, String attributeName, @Nullable 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(@Nullable Object value)
Get the display value of the supplied `Object`, HTML escaped as required. This version is not `PropertyEditor`-aware.

### getDisplayString

protected String getDisplayString(@Nullable Object value, @Nullable 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`