...
Be sure to read the Tag Syntax document to learn how tag attribute syntax works.
Generic Tags
Generic tags are used for controlling the execution flow when the pages render. These tags also allow for data extraction from places other than your action or the value stack, such as Internationalization, JavaBeans, and including additional URLs or action executions.
- Control Tags provide control flow, such as if, else, and iterator.
- Data Tags allow for data manipulation or creation, such as bean, push, and i18n.
UI Tags
Unlike generic tags, UI tags do not provide much control structure or logic. Rather, they are focussed on using data, either from your action/value stack or from the Data Tags, and displaying data in rich and reusable HTML. All UI tags are driven by templates and themes. While generic tags simply output some content directly from the tag (if there is any content to output), the UI tags defer to a template, often grouped together as a theme, to do the actual rendering.
Template support allows UI tags to build a rich set of reusable HTML components that can be customized to fit exact requirements. For details, see Themes and Templates.
A must-read explanation of how themes and templates are uses when rendering UI tags. | |
provide all form-related UI output, such as form, textfield, and select. | |
provide all non-form-related UI output, such as a, div, and tabbedPanel. |
Language Specific Tag Support
The framework strives to support multiple development environments. The framework does not impose a single template language. Almost any common language can be used, and there are hooks for new languages. By default, almost every single tag is supported in JSP, Velocity, and FreeMarker. In each of these sections, you'll find examples and techniques for applying the generic tag reference toward your specific language or template choice.
Note |
---|
Please make sure you have read the Tag Syntax document and understand how tag attribute syntax works. |
Within the form tags, there are two classes of tags: the form tag itself, and all other tags, which make up the individual form elements. The behavior of the form tag is different than the elements enclosed within it.
Form Tag Themes
As explained in Themes and Templates, the UI Tags (which includes Form Tags) are all driven by templates. Templates are grouped together to create themes. The framework bundles three themes in the distribution.
simple | Sometimes too simple | |
---|---|---|
xhtml | Extends simple | (default) |
ajax | Extends xhtml |
The predefined themes can be used "as is" or customized.
Tip | ||
---|---|---|
| ||
The xhtml theme renders out a two-column table. If a different layout is needed, do not write your own HTML. Create a new theme or utilize the simple theme. |
Simple theme caveats
The downside of using the simple theme is that it doesn't support as many of the attributes that the other themes do. For example, the label
attribute does nothing in the simple theme, and the automatic display of error messages is not supported.
Common Attributes
All the form tags extend the UIBean class. This base class provides a set of common attributes, that can be grouped in to three categories: templated-related
, javascript-related, and general attributes. The individual attributes are documented on each tag's reference page.
In addition to the common attributes, a special attribute exists for all form element tags: form
(${parameters.form}). The form
property represents the attributes used to render the form tag, such as the form's id. In a template, the form's ID can be found by calling ${parameters.form.id}.
Template-Related Attributes
Wiki Markup |
---|
{snippet:id=templateRelatedAttributes|javadoc=true|url=org.apache.struts2.components.UIBean} |
Javascript-Related Attributes
Wiki Markup |
---|
{snippet:id=javascriptRelatedAttributes|javadoc=true|url=org.apache.struts2.components.UIBean} |
Tooltip Related Attributes
Wiki Markup |
---|
{snippet:id=tooltipattributes|javadoc=true|url=org.apache.struts2.components.UIBean} |
General Attributes
Wiki Markup |
---|
{snippet:id=generalAttributes|javadoc=true|url=org.apache.struts2.components.UIBean} |
Note | ||
---|---|---|
| ||
Some tag attributes may not be utilized by all, or any, of the templates. For example, the form tag supports the |
Value/Name Relationship
In many of the tags (except for the form tag) there is a unique relationship between the name
and value
attributes. The name
attribute provides the name for the tag, which in turn is used as the control attribute when the form is submitted. The value submitted is bound to the name
. In most cases, the name
maps to a simple JavaBean property, such as "postalCode". On a submit, the value would be set to the property by calling the setPostalCode
mutator.
Likewise, a form control could be populated by calling a JavaBean accessor, like getPostalCode
. In the expression language, we can refer to the JavaBean property by name. An expression like "%{postalCode}" would in turn call getPostalCode
.
...
<@s.form action="updateAddress">
<@saf.textfield label="Postal Code" name="postalCode" value="%{postalCode}"/>
...
</@s.form>
FAQs
- Why do the form tags put table tags around controls?
- How can I put a String literal in a Javascript call, for instance in an onChange attribute?
- Why won't the 'if' tag evaluate a one char string?
- Why does FreeMarker complain that there's an error in my user-directive when I used JSP Tag?
- Can an action tag run another method apart from the default execute method?
- Why didn't my action tag get executed when I have validation errors?
- Why are request parameters appended to our hyperlinks?
Resources
- Creating a UI Component in Struts 2 (Mark Menard)
- Struts 2 Tags (Rose India)
Next: Generic Tags
However, since the tags imply a relationship between the name
and value
, the value
attribute is optional. If a value
is not specified, by default, the JavaBean accessor is used instead.
...
<@s.form action="updateAddress">
<@s.textfield label="Postal Code" name="postalCode"/>
...
</@s.form>
While most attributes are exposed to the underlying templates as the same key as the attribute (${parameters.label}), the value
attribute is not. Instead, it can be accessed via the nameValue
key (${parameters.nameValue}). The nameValue
key indicates that the value may have been generated from the name
attribute rather than explicitly defined in the value
attribute.
ID Name Assignment
All form tags automatically assign an ID to the control, but the ID can be overridden if needed.
Forms | The default ID is the action name. For example, "updateAddress". |
---|---|
Controls | The default ID is the form's name concatenated with the tag name. For example, "updateAddress_postalCode". |
Required Attribute
The required
attribute on many UI tags defaults to true only if you have client-side validation enabled, and a validator is associated with that particular field.
Tooltip
Wiki Markup |
---|
{snippet:id=tooltipdescription|javadoc=true|url=org.apache.struts2.components.UIBean} |
Wiki Markup |
---|
{snippet:id=tooltipexample|lang=xml|javadoc=true|url=org.apache.struts2.components.UIBean} |
Tag Reference
For detailed descriptions of each tag, including usage examples, see the Tag Reference.
Generic Tags
Control Tags |
| Data Tags |
|
---|
UI Tags
Form Tags |
| Non-Form UI Tags |
|
---|
...