Fork me on GitHub
Edit on GitHub

Alt Syntax

The altSyntax is an option that can be defined in struts.xml. By default it is set to true and it is strongly recommend you do not change that unless you are upgrading from WebWork 2.1.7 or previous versions.

You can also turn on the altSyntax on a per-page basis by using the set tag. Simply set the name useAltSyntax
to the value true . From this point on, all tags will use the altSyntax for the rest of the request.

The altSyntax changes the behavior of how tags are interpreted. Instead of evaluating each tag parameter against the value stack and needing single quotes to mark string literals, only marked expressions are evaluated.


the following code uses the Tag Syntax:

<s:iterator value="cart.items">
   <s:textfield label="'Cart item No.' + #rowstatus.index + ' note'" 
                 name="'cart.items[' + #rowstatus.index + '].note'" 
                 value="note" />

this is somewhat counter intuitive to normal HTML tag behaviour, and you get loads of single quotes. Now the same example in altSyntax:

<s:iterator value="cart.items">
   <s:textfield label="Cart item No. %{#rowstatus.index} note" 
                 value="%{note}" />

Only expressions enclosed with %{} are evaluated. The code is shorter and clearer, very similar to JSTL EL usage. Quoting problems, eg. with javascript function calls, are avoided.

In order to fully understand why this option exists and what the differences are, it is best to get a bit of history about WebWork.

If you are not upgrading from WebWork 2.1.7 or previous versions and you don’t care about the history of WebWork’s evolution, you can skip this section. See the Tag Syntax section for more information on the standard tag syntax support


In WebWork 2.1.4, the altSyntax option was introduced. The book, WebWork in Action, while based around WebWork 2.1.7, was entirely written with the assumption that the altSyntax was enabled. As of WebWork 2.2, the altSyntax is turned on by default and eventually the old syntax will no longer be supported and will be removed from the code.