Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

As Matt Ho explained on the mailing list:

Wiki Markup A value stack is essentially a List. Calling \ [1] on the stack,
returns a substack beginning with the element at index 1. It's only
when you call methods on the stack that your actual objects will be
called.

Said another way, let's say I have a value stack that consists of a
model and an action as follows:unmigrated-wiki-markup

\ [ model, action \ ]

here's how the following ognl would resolve:unmigrated-wiki-markup

\ [0\] - a CompoundRoot object that contains our stack, \ [model, action\]

Wiki Markup \ [1\] - another CompoundRoot that contains only \ [action\]unmigrated-wiki-markup

\ [0\].toString() - calls toString() on the first object in the value
stack (excluding the CompoundRoot) that supports the toString() method

Wiki Markup \ [1\].foo - call getFoo() on the first object in the value stack
starting from \ [OS:action] and excluding the CompoundRoot that supports a
getFoo() method

I hope this doesn't sound too confusing :\

If you're using Velocity, this can most easily be written as:

Wiki Markup $stack.findValue("\[0\]").peek()

Wiki Markup Unfortunately, <ww:property value="\[0\].peek()"/> won't work as this
would translate into "starting at the top of the value stack (and
excluding the CompoundRoot), find the first object that has a method
called peek()"

--------thanks Matt!

here is the com.opensymphony.xwork.util.CompoundRoot class which Matt mentions:

...