org.springframework.web.servlet.tags.form
Class SelectTag

java.lang.Object
  extended by javax.servlet.jsp.tagext.TagSupport
      extended by org.springframework.web.servlet.tags.RequestContextAwareTag
          extended by org.springframework.web.servlet.tags.HtmlEscapingAwareTag
              extended by org.springframework.web.servlet.tags.form.AbstractFormTag
                  extended by org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag
                      extended by org.springframework.web.servlet.tags.form.AbstractHtmlElementTag
                          extended by org.springframework.web.servlet.tags.form.AbstractHtmlInputElementTag
                              extended by org.springframework.web.servlet.tags.form.SelectTag
All Implemented Interfaces:
java.io.Serializable, javax.servlet.jsp.tagext.DynamicAttributes, javax.servlet.jsp.tagext.IterationTag, javax.servlet.jsp.tagext.JspTag, javax.servlet.jsp.tagext.Tag, javax.servlet.jsp.tagext.TryCatchFinally, EditorAwareTag

public class SelectTag
extends AbstractHtmlInputElementTag

Databinding-aware JSP tag that renders an HTML 'select' element.

Inner 'option' tags can be rendered using one of the approaches supported by the OptionWriter class.

Also supports the use of nested OptionTags or (typically one) nested OptionsTag.

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

Field Summary
private static java.lang.Object EMPTY
          Marker object for items that have been specified but resolve to null.
private  java.lang.String itemLabel
          The name of the property mapped to the inner text of the 'option' tag.
private  java.lang.Object items
          The Collection, Map or array of objects used to generate the inner 'option' tags.
private  java.lang.String itemValue
          The name of the property mapped to the 'value' attribute of the 'option' tag.
static java.lang.String LIST_VALUE_PAGE_ATTRIBUTE
          The PageContext attribute under which the bound value is exposed to inner OptionTags.
private  java.lang.Object multiple
          Indicates whether or not the 'select' tag allows multiple-selections.
private  java.lang.String size
          The value of the HTML 'size' attribute rendered on the final 'select' element.
private  TagWriter tagWriter
          The TagWriter instance that the output is being written.
 
Fields inherited from class org.springframework.web.servlet.tags.form.AbstractHtmlInputElementTag
ACCESSKEY_ATTRIBUTE, DISABLED_ATTRIBUTE, ONBLUR_ATTRIBUTE, ONCHANGE_ATTRIBUTE, ONFOCUS_ATTRIBUTE, READONLY_ATTRIBUTE
 
Fields inherited from class org.springframework.web.servlet.tags.form.AbstractHtmlElementTag
CLASS_ATTRIBUTE, DIR_ATTRIBUTE, LANG_ATTRIBUTE, ONCLICK_ATTRIBUTE, ONDBLCLICK_ATTRIBUTE, ONKEYDOWN_ATTRIBUTE, ONKEYPRESS_ATTRIBUTE, ONKEYUP_ATTRIBUTE, ONMOUSEDOWN_ATTRIBUTE, ONMOUSEMOVE_ATTRIBUTE, ONMOUSEOUT_ATTRIBUTE, ONMOUSEOVER_ATTRIBUTE, ONMOUSEUP_ATTRIBUTE, STYLE_ATTRIBUTE, TABINDEX_ATTRIBUTE, TITLE_ATTRIBUTE
 
Fields inherited from class org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag
COMMAND_NAME_VARIABLE_NAME, NESTED_PATH_VARIABLE_NAME
 
Fields inherited from class org.springframework.web.servlet.tags.RequestContextAwareTag
logger, REQUEST_CONTEXT_PAGE_ATTRIBUTE
 
Fields inherited from class javax.servlet.jsp.tagext.TagSupport
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
SelectTag()
           
 
Method Summary
 int doEndTag()
          Closes any block tag that might have been opened when using nested options.
 void doFinally()
          Clears the TagWriter that might have been left over when using nested options.
private  boolean forceMultiple()
          Returns 'true' if the bound value requires the resultant 'select' tag to be multi-select.
protected  java.lang.String getItemLabel()
          Get the value of the 'itemLabel' attribute.
protected  java.lang.Object getItems()
          Get the value of the 'items' attribute.
protected  java.lang.String getItemValue()
          Get the value of the 'itemValue' attribute.
protected  java.lang.Object getMultiple()
          Get the value of the HTML 'multiple' attribute rendered on the final 'select' element.
protected  java.lang.String getSize()
          Get the value of the 'size' attribute.
private  boolean isMultiple()
           
 void setItemLabel(java.lang.String itemLabel)
          Set the name of the property mapped to the label (inner text) of the 'option' tag.
 void setItems(java.lang.Object items)
          Set the Collection, Map or array of objects used to generate the inner 'option' tags.
 void setItemValue(java.lang.String itemValue)
          Set the name of the property mapped to the 'value' attribute of the 'option' tag.
 void setMultiple(java.lang.Object multiple)
          Set the value of the HTML 'multiple' attribute rendered on the final 'select' element.
 void setSize(java.lang.String size)
          Set the value of the HTML 'size' attribute rendered on the final 'select' element.
private static boolean typeRequiresMultiple(java.lang.Class type)
          Returns 'true' for arrays, Collections and Maps.
private  void writeHiddenTagIfNecessary(TagWriter tagWriter)
          If using a multi-select, a hidden element is needed to make sure all items are correctly unselected on the server-side in response to a null post.
protected  int writeTagContent(TagWriter tagWriter)
          Renders the HTML 'select' tag to the supplied TagWriter.
 
Methods inherited from class org.springframework.web.servlet.tags.form.AbstractHtmlInputElementTag
getAccesskey, getDisabled, getOnblur, getOnchange, getOnfocus, getReadonly, isDisabled, isReadonly, setAccesskey, setDisabled, setOnblur, setOnchange, setOnfocus, setReadonly, writeOptionalAttributes
 
Methods inherited from class org.springframework.web.servlet.tags.form.AbstractHtmlElementTag
getCssClass, getCssErrorClass, getCssStyle, getDir, getDynamicAttributes, getLang, getOnclick, getOndblclick, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getTabindex, getTitle, resolveCssClass, setCssClass, setCssErrorClass, setCssStyle, setDir, setDynamicAttribute, setLang, setOnclick, setOndblclick, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setTabindex, setTitle, writeDefaultAttributes
 
Methods inherited from class org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag
autogenerateId, convertToDisplayString, getBindStatus, getBoundValue, getEditor, getId, getName, getNestedPath, getPath, getPropertyEditor, getPropertyPath, resolveId, setId, setPath
 
Methods inherited from class org.springframework.web.servlet.tags.form.AbstractFormTag
createTagWriter, doStartTagInternal, evaluate, evaluateBoolean, getDisplayString, getDisplayString, isDefaultHtmlEscape, writeOptionalAttribute
 
Methods inherited from class org.springframework.web.servlet.tags.HtmlEscapingAwareTag
isHtmlEscape, setHtmlEscape
 
Methods inherited from class org.springframework.web.servlet.tags.RequestContextAwareTag
doCatch, doStartTag, getRequestContext
 
Methods inherited from class javax.servlet.jsp.tagext.TagSupport
doAfterBody, findAncestorWithClass, getParent, getValue, getValues, release, removeValue, setPageContext, setParent, setValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LIST_VALUE_PAGE_ATTRIBUTE

public static final java.lang.String LIST_VALUE_PAGE_ATTRIBUTE
The PageContext attribute under which the bound value is exposed to inner OptionTags.

See Also:
Constant Field Values

EMPTY

private static final java.lang.Object EMPTY
Marker object for items that have been specified but resolve to null. Allows to differentiate between 'set but null' and 'not set at all'.


items

private java.lang.Object items
The Collection, Map or array of objects used to generate the inner 'option' tags.


itemValue

private java.lang.String itemValue
The name of the property mapped to the 'value' attribute of the 'option' tag.


itemLabel

private java.lang.String itemLabel
The name of the property mapped to the inner text of the 'option' tag.


size

private java.lang.String size
The value of the HTML 'size' attribute rendered on the final 'select' element.


multiple

private java.lang.Object multiple
Indicates whether or not the 'select' tag allows multiple-selections.


tagWriter

private TagWriter tagWriter
The TagWriter instance that the output is being written.

Only used in conjunction with nested OptionTags.

Constructor Detail

SelectTag

public SelectTag()
Method Detail

setItems

public void setItems(java.lang.Object items)
Set the Collection, Map or array of objects used to generate the inner 'option' tags.

Required when wishing to render 'option' tags from an array, Collection or Map.

Typically a runtime expression.

Parameters:
items - the items that comprise the options of this selection

getItems

protected java.lang.Object getItems()
Get the value of the 'items' attribute.

May be a runtime expression.


setItemValue

public void setItemValue(java.lang.String itemValue)
Set the name of the property mapped to the 'value' attribute of the 'option' tag.

Required when wishing to render 'option' tags from an array or Collection.

May be a runtime expression.


getItemValue

protected java.lang.String getItemValue()
Get the value of the 'itemValue' attribute.

May be a runtime expression.


setItemLabel

public void setItemLabel(java.lang.String itemLabel)
Set the name of the property mapped to the label (inner text) of the 'option' tag.

May be a runtime expression.


getItemLabel

protected java.lang.String getItemLabel()
Get the value of the 'itemLabel' attribute.

May be a runtime expression.


setSize

public void setSize(java.lang.String size)
Set the value of the HTML 'size' attribute rendered on the final 'select' element.

May be a runtime expression.

Parameters:
size - the desired value of the 'size' attribute

getSize

protected java.lang.String getSize()
Get the value of the 'size' attribute.

May be a runtime expression.


setMultiple

public void setMultiple(java.lang.Object multiple)
Set the value of the HTML 'multiple' attribute rendered on the final 'select' element.

May be a runtime expression.


getMultiple

protected java.lang.Object getMultiple()
Get the value of the HTML 'multiple' attribute rendered on the final 'select' element.

May be a runtime expression.


writeTagContent

protected int writeTagContent(TagWriter tagWriter)
                       throws javax.servlet.jsp.JspException
Renders the HTML 'select' tag to the supplied TagWriter.

Renders nested 'option' tags if the items property is set, otherwise exposes the bound value for the nested OptionTags.

Specified by:
writeTagContent in class AbstractFormTag
Returns:
valid tag render instruction as per Tag.doStartTag().
Throws:
javax.servlet.jsp.JspException

writeHiddenTagIfNecessary

private void writeHiddenTagIfNecessary(TagWriter tagWriter)
                                throws javax.servlet.jsp.JspException
If using a multi-select, a hidden element is needed to make sure all items are correctly unselected on the server-side in response to a null post.

Throws:
javax.servlet.jsp.JspException

isMultiple

private boolean isMultiple()
                    throws javax.servlet.jsp.JspException
Throws:
javax.servlet.jsp.JspException

forceMultiple

private boolean forceMultiple()
                       throws javax.servlet.jsp.JspException
Returns 'true' if the bound value requires the resultant 'select' tag to be multi-select.

Throws:
javax.servlet.jsp.JspException

typeRequiresMultiple

private static boolean typeRequiresMultiple(java.lang.Class type)
Returns 'true' for arrays, Collections and Maps.


doEndTag

public int doEndTag()
             throws javax.servlet.jsp.JspException
Closes any block tag that might have been opened when using nested options.

Specified by:
doEndTag in interface javax.servlet.jsp.tagext.Tag
Overrides:
doEndTag in class javax.servlet.jsp.tagext.TagSupport
Throws:
javax.servlet.jsp.JspException

doFinally

public void doFinally()
Clears the TagWriter that might have been left over when using nested options.

Specified by:
doFinally in interface javax.servlet.jsp.tagext.TryCatchFinally
Overrides:
doFinally in class AbstractDataBoundFormElementTag