The xhtml provides all the basics that the simple theme provides and adds several features.
- Standard two-column table layout for the HTML Struts Tags (form, textfield, select, and so forth)
- Labels for each of the HTML Struts Tags on the left hand side (or top, depending on the
labelposition
attribute) - Validation and error reporting
- Pure JavaScript Client Side Validation using 100% JavaScript on the browser
Wrapping the Simple Theme
The xhtml theme uses the "wrapping" technique described by Extending Themes. Let's look at how the HTML tags are wrapped by a standard header and footer. For example, in the text.ftl
template, the controlheader.ftl
and controlfooter.ftl
templates are wrapped around the simple template.
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/text.ftl} |
The controlheader.ftl
is referenced using ${parameters.theme} so that the code can be reused by the ajax theme.
XHTML Theme Header
Now let's look at the controlheader.ftl
and controlheader-core.ftl
. Again, these are split up for easy re-use with the ajax theme) contents:
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlheader.ftl} |
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlheader-core.ftl} |
The header used by the HTML tags in the xhtml theme is complicated. However, a close look reveals that the logic produces two behaviors: either a two-column format or a two-row format. Generally the two-column approach is what we want, so that is the default option. To use the two-row approach, change the labelposition
parameter to top
.
Tip | ||
---|---|---|
| ||
The |
XHTML Theme Footer
The primary objective of controlfooter.ftl
is to close the table. But, before the table closes, the template checks for an after
parameter.
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/controlfooter.ftl} |
While "after" isn't an attribute supported by any of the Struts Tags, if you are using FreeMarker Tags, Velocity Tags, or the param tag in any template language, you can add an after
parameter to place any content you like after the simple theme template renders. The after
attribute makes it easier to fine-tune HTML forms for your specific environment.
Special Interest
Two xhtml templates of special interest are head
and form
.
head template
The xhtml head template extends the simple head template and provides an additional CSS that helps render the xhtml theme form elements.
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/head.ftl} |
The head template imports a style sheet.
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/styles.css} |
form template
The xhtml form template sets up the wrapping table around all the other xhtml theme form elements. In addition to creating this wrapping table, the opening and closing templates also, if the validate
parameter is set to true, enable Pure JavaScript Client Side Validation.
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form.ftl} |
The closing template, form-close.ftl*
:
Wiki Markup |
---|
{snippet:id=all|lang=xml|url=struts2/core/src/main/resources/template/xhtml/form-close.ftl} |