Package org.apache.struts2.views.jsp.iterator

# Class IteratorGeneratorTag

java.lang.Object
jakarta.servlet.jsp.tagext.TagSupport
jakarta.servlet.jsp.tagext.BodyTagSupport
org.apache.struts2.views.jsp.StrutsBodyTagSupport
org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag

All Implemented Interfaces:
  `jakarta.servlet.jsp.tagext.BodyTag`, `jakarta.servlet.jsp.tagext.IterationTag`, `jakarta.servlet.jsp.tagext.JspTag`, `jakarta.servlet.jsp.tagext.Tag`, `Serializable`

public class IteratorGeneratorTag extends StrutsBodyTagSupport
NOTE: JSP-TAG

Generate an iterator based on the val attribute supplied.

NOTE: The generated iterator will ALWAYS be pushed into the top of the stack, and poped at the end of the tag.

- val* (Object) - the source to be parsed into an iterator
- count (Object) - the max number (Integer, Float, Double, Long, String) entries to be in the iterator
- separator (String) - the separator to be used in separating the val into entries of the iterator
- var (String) - the name to store the resultant iterator into page context, if such name is supplied
- converter (Object) - the converter (must extends off IteratorGenerator.Converter interface) to convert the String entry parsed from val into an object

Example One:

     Generate a simple iterator
     <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
      <s:iterator>
          <s:property /><br/>
      </s:iterator>
     </s:generator>

This generates an iterator and print it out using the iterator tag. Example Two:

     Generate an iterator with count attribute
     <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
      <s:iterator>
          <s:property /><br/>
      </s:iterator>
     </s:generator>

This generates an iterator, but only 3 entries will be available in the iterator generated, namely aaa, bbb and ccc respectively because count attribute is set to 3 Example Three:

     Generate an iterator with var attribute
     <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," var="myAtt" />
     <%
      Iterator i = (Iterator) pageContext.getAttribute("myAtt");
      while(i.hasNext()) {
          String s = (String) i.next(); %>
          <%=s%> <br/>
     <%    }
     %>

This generates an iterator and put it in the PageContext under the key as specified by the var attribute. Example Four:

     Generate an iterator with comparator attribute
     <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
      <s:iterator>
          <s:property /><br/>
      </s:iterator>
     </s:generator>

     public class GeneratorTagAction extends ActionSupport {

       ....

       public Converter getMyConverter() {
          return new Converter() {
              public Object convert(String value) throws Exception {
                  return "converter-"+value;
              }
          };
       }

       ...

     }

This will generate an iterator with each entries decided by the converter supplied. With this converter, it simply add "converter-" to each entries.

See Also:
  - `IteratorGenerator`
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `DEFAULT_SEPARATOR`

  ### Fields inherited from class jakarta.servlet.jsp.tagext.BodyTagSupport

  `bodyContent`

  ### Fields inherited from class jakarta.servlet.jsp.tagext.TagSupport

  `id, pageContext`

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

  `EVAL_BODY_BUFFERED, EVAL_BODY_TAG`

  ### 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
  `IteratorGeneratorTag()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `clearTagStateForTagPoolingServers()`
  Provide a mechanism to clear tag state, to handle servlet container JSP tag pooling behaviour with some servers, such as Glassfish.
  `int`
  `doEndTag()`
  `int`
  `doStartTag()`
  `void`
  `setConverter(String aConverter)`
  `void`
  `setCount(String count)`
  `void`
  `setPerformClearTagStateForTagPoolingServers(boolean performClearTagStateForTagPoolingServers)`
  Request that the tag state be cleared during `StrutsBodyTagSupport.doEndTag()` processing, which may help with certain edge cases with tag logic running on servers that implement JSP Tag Pooling.
  `void`
  `setSeparator(String separator)`
  @s.tagattribute required="true" type="String" description="the separator to be used in separating the val into entries of the iterator"
  `void`
  `setVal(String val)`
  @s.tagattribute required="true" description="the source to be parsed into an iterator"
  `void`
  `setVar(String var)`

  ### Methods inherited from class org.apache.struts2.views.jsp.StrutsBodyTagSupport

  `findString, findValue, findValue, getBody, getPerformClearTagStateForTagPoolingServers, getStack, release, toString`

  ### Methods inherited from class jakarta.servlet.jsp.tagext.BodyTagSupport

  `doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent`

  ### Methods inherited from class jakarta.servlet.jsp.tagext.TagSupport

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

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

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

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

  `getParent, setPageContext, setParent`

- ## Field Details

  - ### DEFAULT_SEPARATOR

    public static final String DEFAULT_SEPARATOR
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### IteratorGeneratorTag

    public IteratorGeneratorTag()

- ## Method Details

  - ### setCount

    public void setCount(String count)

  - ### setSeparator

    public void setSeparator(String separator)
    @s.tagattribute required="true" type="String" description="the separator to be used in separating the val into entries of the iterator"
    Parameters:
      `separator` - the seperator

  - ### setVal

    public void setVal(String val)
    @s.tagattribute required="true" description="the source to be parsed into an iterator"
    Parameters:
      `val` - the value

  - ### setConverter

    public void setConverter(String aConverter)

  - ### setVar

    public void setVar(String var)

  - ### setPerformClearTagStateForTagPoolingServers

    public void setPerformClearTagStateForTagPoolingServers(boolean performClearTagStateForTagPoolingServers)
    Description copied from class: `StrutsBodyTagSupport`
    Request that the tag state be cleared during `StrutsBodyTagSupport.doEndTag()` processing, which may help with certain edge cases with tag logic running on servers that implement JSP Tag Pooling. Note: Even though the Tag classes extend this class `StrutsBodyTagSupport`, and this method `StrutsBodyTagSupport.setPerformClearTagStateForTagPoolingServers(boolean)` exists in the method hierarchy, the JSP processing requires us to explicitly override it in every Tag class in order for the Tag handler method to be visible to the JSP processing. Defining a setter in the superclass alone is insufficient (results in "Cannot find a setter method for the attribute").

    See `StrutsBodyTagSupport.clearTagStateForTagPoolingServers()` for additional details. Warning: Setting this value to true may allow for the desired behaviour, but doing so may violate the JSP specification. Set to true at your own risk.

    Overrides:
      `setPerformClearTagStateForTagPoolingServers` in class `StrutsBodyTagSupport`
    Parameters:
      `performClearTagStateForTagPoolingServers` - true if tag state should be cleared, false otherwise.

  - ### doStartTag

    public int doStartTag() throws jakarta.servlet.jsp.JspException
    Specified by:
      `doStartTag` in interface `jakarta.servlet.jsp.tagext.Tag`
    Overrides:
      `doStartTag` in class `jakarta.servlet.jsp.tagext.BodyTagSupport`
    Throws:
      `jakarta.servlet.jsp.JspException`

  - ### doEndTag

    public int doEndTag() throws jakarta.servlet.jsp.JspException
    Specified by:
      `doEndTag` in interface `jakarta.servlet.jsp.tagext.Tag`
    Overrides:
      `doEndTag` in class `StrutsBodyTagSupport`
    Throws:
      `jakarta.servlet.jsp.JspException`

  - ### clearTagStateForTagPoolingServers

    protected void clearTagStateForTagPoolingServers()
    Description copied from class: `StrutsBodyTagSupport`
    Provide a mechanism to clear tag state, to handle servlet container JSP tag pooling behaviour with some servers, such as Glassfish.

    Usage: Override this method in descendant classes to clear any state that might cause issues should the servlet container re-use a cached instance of the tag object. If the descendant class does not declare any new field members then it should not be strictly necessary to call this method there. Typically that means calling the ancestor's `ComponentTagSupport.clearTagStateForTagPoolingServers()` method first, then resetting instance variables at the current level to their default state.

    Note: If the descendant overrides `StrutsBodyTagSupport.doEndTag()`, and does not call super.doEndTag(), then the descendant should call this method in the descendant doEndTag() method to ensure consistent clearing of tag state.

    Overrides:
      `clearTagStateForTagPoolingServers` in class `StrutsBodyTagSupport`