com.opensymphony.webwork.components
Class MergeIterator

java.lang.Object
  extended by com.opensymphony.webwork.components.Component
      extended by com.opensymphony.webwork.components.MergeIterator
All Implemented Interfaces:
Param.UnnamedParametric

public class MergeIterator
extends Component
implements Param.UnnamedParametric

Component for MergeIteratorTag, which job is to merge iterators and successive call to the merged iterator will cause each merge iterator to have a chance to expose its element, subsequently next call will allow the next iterator to expose its element. Once the last iterator is done exposing its element, the first iterator is allowed to do so again (unless it is exhausted of entries).

Internally the task are delegated to MergeIteratorFilter

Example if there are 3 lists being merged, each list have 3 entries, the following will be the logic.

  1. Display first element of the first list
  2. Display first element of the second list
  3. Display first element of the third list
  4. Display second element of the first list
  5. Display second element of the second list
  6. Display second element of the third list
  7. Display third element of the first list
  8. Display thrid element of the second list
  9. Display third element of the thrid list
public class MergeIteratorTagAction extends ActionSupport { private List myList1; private List myList2; private List myList3; public List getMyList1() { return myList1; } public List getMyList2() { return myList2; } public List getMyList3() { return myList3; } public String execute() throws Exception { myList1 = new ArrayList(); myList1.add("1"); myList1.add("2"); myList1.add("3"); myList2 = new ArrayList(); myList2.add("a"); myList2.add("b"); myList2.add("c"); myList3 = new ArrayList(); myList3.add("A"); myList3.add("B"); myList3.add("C"); return "done"; } } <ww:merge id="myMergedIterator1"> <ww:param value="%{myList1}" /> <ww:param value="%{myList2}" /> <ww:param value="%{myList3}" /> </ww:merge> <ww:iterator value="%{#myMergedIterator1}"> <ww:property /> </ww:iterator> This wil generate "1aA2bB3cC".

Version:
$Date: 2006-03-19 00:28:55 +0800 (Sun, 19 Mar 2006) $ $Id: MergeIterator.java 2468 2006-03-18 16:28:55Z rgielen $
Author:
tm_jee (tm_jee (at) yahoo.co.uk)
See Also:
MergeIteratorFilter, MergeIteratorTag

Field Summary
 
Fields inherited from class com.opensymphony.webwork.components.Component
COMPONENT_STACK, id, parameters, stack
 
Constructor Summary
MergeIterator(OgnlValueStack stack)
           
 
Method Summary
 void addParameter(Object value)
          Adds the given value as a parameter to the outer tag.
 boolean end(Writer writer, String body)
          Callback for the end tag of this component.
 void setId(String id)
          the id where the resultant merged iterator will be stored in the stack's context
 boolean start(Writer writer)
          Callback for the start tag of this component.
 
Methods inherited from class com.opensymphony.webwork.components.Component
addAllParameters, addParameter, altSyntax, copyParams, determineActionURL, determineNamespace, end, fieldError, findAncestor, findString, findString, findValue, findValue, findValue, getComponentStack, getId, getParameters, getStack, popComponentStack, toString, usesBody
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MergeIterator

public MergeIterator(OgnlValueStack stack)
Method Detail

start

public boolean start(Writer writer)
Description copied from class: Component
Callback for the start tag of this component. Should the body be evaluated?

Overrides:
start in class Component
Parameters:
writer - the output writer.
Returns:
true if the body should be evaluated

end

public boolean end(Writer writer,
                   String body)
Description copied from class: Component
Callback for the end tag of this component. Should the body be evaluated again?

NOTE: will pop component stack.

Overrides:
end in class Component
Parameters:
writer - the output writer.
body - the rendered body.
Returns:
true if the body should be evaluated again

setId

public void setId(String id)
the id where the resultant merged iterator will be stored in the stack's context

Overrides:
setId in class Component

addParameter

public void addParameter(Object value)
Description copied from interface: Param.UnnamedParametric
Adds the given value as a parameter to the outer tag.

Specified by:
addParameter in interface Param.UnnamedParametric
Parameters:
value - the value

WebWork Project Page