This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/struts-site.git
The following commit(s) were added to refs/heads/main by this push:
new 695a69479 Replaces parameters with attributes (#270)
695a69479 is described below
commit 695a69479bae851bfc541458fb50ab7f84112d86
Author: Lukasz Lenart <[email protected]>
AuthorDate: Thu May 29 07:59:17 2025 +0200
Replaces parameters with attributes (#270)
---
.../core-developers/ajax-client-side-validation.md | 58 +++++++++++-----------
source/getting-started/themes.md | 6 +--
source/plugins/json/json-ajax-validation.md | 58 +++++++++++-----------
source/tag-developers/ajax-theme.md | 10 ++--
source/tag-developers/extending-themes.md | 14 +++---
source/tag-developers/form-tags.md | 8 +--
source/tag-developers/freemarker-tags.md | 14 +++---
source/tag-developers/freemarker.md | 6 +--
source/tag-developers/xhtml-theme.md | 2 +-
9 files changed, 90 insertions(+), 86 deletions(-)
diff --git a/source/core-developers/ajax-client-side-validation.md
b/source/core-developers/ajax-client-side-validation.md
index 139013aa3..b9e47ed69 100644
--- a/source/core-developers/ajax-client-side-validation.md
+++ b/source/core-developers/ajax-client-side-validation.md
@@ -224,22 +224,22 @@ parent = xhtml
Make sure element is always present. To be filled later via JS.
-->
<ul<#rt/>
-<#if parameters.id??>
- id="${parameters.id?html}"<#rt/>
+<#if attributes.id??>
+ id="${attributes.id?html}"<#rt/>
</#if>
-<#if parameters.cssClass??>
- class="${parameters.cssClass?html}"<#rt/>
+<#if attributes.cssClass??>
+ class="${attributes.cssClass?html}"<#rt/>
<#else>
class="errorMessage"<#rt/>
</#if>
-<#if parameters.cssStyle??>
- style="${parameters.cssStyle?html}"<#rt/>
+<#if attributes.cssStyle??>
+ style="${attributes.cssStyle?html}"<#rt/>
</#if>
>
<#if (actionErrors?? && actionErrors?size > 0)>
<#list actionErrors as error>
<#if error??>
- <li><span><#if
parameters.escape>${error!?html}<#else>${error!}</#if></span><#rt/></li><#rt/>
+ <li><span><#if
attributes.escape>${error!?html}<#else>${error!}</#if></span><#rt/></li><#rt/>
</#if>
</#list>
</#if>
@@ -249,16 +249,16 @@ parent = xhtml
**controlfooter.ftl**
```ftl
-${parameters.after!}<#t/>
+${attributes.after!}<#t/>
</td><#lt/>
</tr>
-<#if (parameters.errorposition!"top") == 'bottom'>
-<#assign hasFieldErrors = parameters.name?? && fieldErrors?? &&
fieldErrors[parameters.name]??/>
+<#if (attributes.errorposition!"top") == 'bottom'>
+<#assign hasFieldErrors = attributes.name?? && fieldErrors?? &&
fieldErrors[attributes.name]??/>
<#if hasFieldErrors>
-<tr errorFor="${parameters.id}">
+<tr errorFor="${attributes.id}">
<td class="tdErrorMessage" colspan="2"><#rt/>
<#if hasFieldErrors>
- <#list fieldErrors[parameters.name] as error>
+ <#list fieldErrors[attributes.name] as error>
<div class="errorMessage">${error?html}</div><#t/>
</#list>
</#if>
@@ -274,22 +274,22 @@ ${parameters.after!}<#t/>
<#--
Always include elements to show errors. They may be filled later via AJAX.
-->
-<#assign hasFieldErrors = parameters.name?? && fieldErrors?? &&
fieldErrors[parameters.name]??/>
-<#if (parameters.errorposition!"top") == 'top'>
-<tr errorFor="${parameters.id}">
- <td class="tdErrorMessage" colspan="2"
data-error-for-fieldname="${parameters.name}"><#rt/>
+<#assign hasFieldErrors = attributes.name?? && fieldErrors?? &&
fieldErrors[attributes.name]??/>
+<#if (attributes.errorposition!"top") == 'top'>
+<tr errorFor="${attributes.id}">
+ <td class="tdErrorMessage" colspan="2"
data-error-for-fieldname="${attributes.name}"><#rt/>
<#if hasFieldErrors>
- <#list fieldErrors[parameters.name] as error>
+ <#list fieldErrors[attributes.name] as error>
<div class="errorMessage">${error?html}</div><#t/>
</#list>
</#if>
</td><#lt/>
</tr>
</#if>
-<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
-<#assign labelpos = parameters.form.labelposition/>
-<#elseif parameters.labelposition??>
-<#assign labelpos = parameters.labelposition/>
+<#if !attributes.labelposition?? && (attributes.form.labelposition)??>
+<#assign labelpos = attributes.form.labelposition/>
+<#elseif attributes.labelposition??>
+<#assign labelpos = attributes.labelposition/>
</#if>
<#--
if the label position is top,
@@ -301,10 +301,10 @@ ${parameters.after!}<#t/>
<#else>
<td class="tdLabel"><#rt/>
</#if>
-<#if parameters.label??>
+<#if attributes.label??>
<label <#t/>
-<#if parameters.id??>
- for="${parameters.id?html}" <#t/>
+<#if attributes.id??>
+ for="${attributes.id?html}" <#t/>
</#if>
<#if hasFieldErrors>
class="errorLabel"<#t/>
@@ -312,15 +312,15 @@ ${parameters.after!}<#t/>
class="label"<#t/>
</#if>
><#t/>
-<#if parameters.required!false && parameters.requiredPosition!"right" !=
'right'>
+<#if attributes.required!false && attributes.requiredPosition!"right" !=
'right'>
<span class="required">*</span><#t/>
</#if>
-${parameters.label?html}<#t/>
-<#if parameters.required!false && parameters.requiredPosition!"right" ==
'right'>
+${attributes.label?html}<#t/>
+<#if attributes.required!false && attributes.requiredPosition!"right" ==
'right'>
<span class="required">*</span><#t/>
</#if>
-${parameters.labelseparator!":"?html}<#t/>
-<#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+${attributes.labelseparator!":"?html}<#t/>
+<#include "/${attributes.templateDir}/${attributes.expandTheme}/tooltip.ftl" />
</label><#t/>
</#if>
</td><#lt/>
diff --git a/source/getting-started/themes.md b/source/getting-started/themes.md
index cb8279465..67b34e19a 100644
--- a/source/getting-started/themes.md
+++ b/source/getting-started/themes.md
@@ -157,11 +157,11 @@ I then modified the `checkboxlist.ftl` in the KUTheme
folder to be:
**Modified checkboxlist.ftl**
```ftl
-<#include
"/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
+<#include
"/${attributes.templateDir}/${attributes.expandTheme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/KUTheme_simple/checkboxlist.ftl" />
+<#include "/${attributes.templateDir}/KUTheme_simple/checkboxlist.ftl" />
-<#include
"/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl"
/><#nt/>
+<#include
"/${attributes.templateDir}/${attributes.expandTheme}/controlfooter.ftl"
/><#nt/>
```
Be sure to note the change to the second line—using KUTheme_simple in the path.
diff --git a/source/plugins/json/json-ajax-validation.md
b/source/plugins/json/json-ajax-validation.md
index b2c73bb9d..77de4947e 100644
--- a/source/plugins/json/json-ajax-validation.md
+++ b/source/plugins/json/json-ajax-validation.md
@@ -211,22 +211,22 @@ parent = xhtml
Make sure element is always present. To be filled later via JS.
-->
<ul<#rt/>
-<#if parameters.id??>
- id="${parameters.id?html}"<#rt/>
+<#if attributes.id??>
+ id="${attributes.id?html}"<#rt/>
</#if>
-<#if parameters.cssClass??>
- class="${parameters.cssClass?html}"<#rt/>
+<#if attributes.cssClass??>
+ class="${attributes.cssClass?html}"<#rt/>
<#else>
class="errorMessage"<#rt/>
</#if>
-<#if parameters.cssStyle??>
- style="${parameters.cssStyle?html}"<#rt/>
+<#if attributes.cssStyle??>
+ style="${attributes.cssStyle?html}"<#rt/>
</#if>
>
<#if (actionErrors?? && actionErrors?size > 0)>
<#list actionErrors as error>
<#if error??>
- <li><span><#if
parameters.escape>${error!?html}<#else>${error!}</#if></span><#rt/></li><#rt/>
+ <li><span><#if
attributes.escape>${error!?html}<#else>${error!}</#if></span><#rt/></li><#rt/>
</#if>
</#list>
</#if>
@@ -236,16 +236,16 @@ parent = xhtml
#### controlfooter.ftl
```html
-${parameters.after!}<#t/>
+${attributes.after!}<#t/>
</td><#lt/>
</tr>
-<#if (parameters.errorposition!"top") == 'bottom'>
-<#assign hasFieldErrors = parameters.name?? && fieldErrors?? &&
fieldErrors[parameters.name]??/>
+<#if (attributes.errorposition!"top") == 'bottom'>
+<#assign hasFieldErrors = attributes.name?? && fieldErrors?? &&
fieldErrors[attributes.name]??/>
<#if hasFieldErrors>
-<tr errorFor="${parameters.id}">
+<tr errorFor="${attributes.id}">
<td class="tdErrorMessage" colspan="2"><#rt/>
<#if hasFieldErrors>
- <#list fieldErrors[parameters.name] as error>
+ <#list fieldErrors[attributes.name] as error>
<div class="errorMessage">${error?html}</div><#t/>
</#list>
</#if>
@@ -261,22 +261,22 @@ ${parameters.after!}<#t/>
<#--
Always include elements to show errors. They may be filled later via AJAX.
-->
-<#assign hasFieldErrors = parameters.name?? && fieldErrors?? &&
fieldErrors[parameters.name]??/>
-<#if (parameters.errorposition!"top") == 'top'>
-<tr errorFor="${parameters.id}">
- <td class="tdErrorMessage" colspan="2"
data-error-for-fieldname="${parameters.name}"><#rt/>
+<#assign hasFieldErrors = attributes.name?? && fieldErrors?? &&
fieldErrors[attributes.name]??/>
+<#if (attributes.errorposition!"top") == 'top'>
+<tr errorFor="${attributes.id}">
+ <td class="tdErrorMessage" colspan="2"
data-error-for-fieldname="${attributes.name}"><#rt/>
<#if hasFieldErrors>
- <#list fieldErrors[parameters.name] as error>
+ <#list fieldErrors[attributes.name] as error>
<div class="errorMessage">${error?html}</div><#t/>
</#list>
</#if>
</td><#lt/>
</tr>
</#if>
-<#if !parameters.labelposition?? && (parameters.form.labelposition)??>
-<#assign labelpos = parameters.form.labelposition/>
-<#elseif parameters.labelposition??>
-<#assign labelpos = parameters.labelposition/>
+<#if !attributes.labelposition?? && (attributes.form.labelposition)??>
+<#assign labelpos = attributes.form.labelposition/>
+<#elseif attributes.labelposition??>
+<#assign labelpos = attributes.labelposition/>
</#if>
<#--
if the label position is top,
@@ -288,10 +288,10 @@ ${parameters.after!}<#t/>
<#else>
<td class="tdLabel"><#rt/>
</#if>
-<#if parameters.label??>
+<#if attributes.label??>
<label <#t/>
-<#if parameters.id??>
- for="${parameters.id?html}" <#t/>
+<#if attributes.id??>
+ for="${attributes.id?html}" <#t/>
</#if>
<#if hasFieldErrors>
class="errorLabel"<#t/>
@@ -299,15 +299,15 @@ ${parameters.after!}<#t/>
class="label"<#t/>
</#if>
><#t/>
-<#if parameters.required!false && parameters.requiredPosition!"right" !=
'right'>
+<#if attributes.required!false && attributes.requiredPosition!"right" !=
'right'>
<span class="required">*</span><#t/>
</#if>
-${parameters.label?html}<#t/>
-<#if parameters.required!false && parameters.requiredPosition!"right" ==
'right'>
+${attributes.label?html}<#t/>
+<#if attributes.required!false && attributes.requiredPosition!"right" ==
'right'>
<span class="required">*</span><#t/>
</#if>
-${parameters.labelseparator!":"?html}<#t/>
-<#include "/${parameters.templateDir}/${parameters.expandTheme}/tooltip.ftl" />
+${attributes.labelseparator!":"?html}<#t/>
+<#include "/${attributes.templateDir}/${attributes.expandTheme}/tooltip.ftl" />
</label><#t/>
</#if>
</td><#lt/>
diff --git a/source/tag-developers/ajax-theme.md
b/source/tag-developers/ajax-theme.md
index 9a52a0dff..287508bde 100644
--- a/source/tag-developers/ajax-theme.md
+++ b/source/tag-developers/ajax-theme.md
@@ -42,13 +42,13 @@ The wrapping technique utilized by the ajax theme is much
like [xhtml theme](xht
is a wee bit different.
```ftl
-<#if parameters.label?if_exists != "">
- <#include "/${parameters.templateDir}/xhtml/controlheader.ftl" />
+<#if attributes.label?if_exists != "">
+ <#include "/${attributes.templateDir}/xhtml/controlheader.ftl" />
</#if>
-<#if parameters.form?exists && parameters.form.validate?default(false) == true>
+<#if attributes.form?exists && attributes.form.validate?default(false) == true>
<#-- can't mutate the data model in freemarker -->
- <#if parameters.onblur?exists>
- ${tag.addParameter('onblur', "validate(this);${parameters.onblur}")}
+ <#if attributes.onblur?exists>
+ ${tag.addParameter('onblur', "validate(this);${attributes.onblur}")}
<#else>
${tag.addParameter('onblur', "validate(this);")}
</#if>
diff --git a/source/tag-developers/extending-themes.md
b/source/tag-developers/extending-themes.md
index c57cb9406..4bd29f017 100644
--- a/source/tag-developers/extending-themes.md
+++ b/source/tag-developers/extending-themes.md
@@ -35,10 +35,12 @@ by adding a header and footer.
### Wrapping a control
+> NOTE: Since Struts 7.x the `parameters` have been replaced with `attributes`
+
```ftl
-<#include
"/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
-<#include "/${parameters.templateDir}/simple/xxx.ftl" />
-<#include
"/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />
+<#include
"/${attributes.templateDir}/${attributes.expandTheme}/controlheader.ftl" />
+<#include "/${attributes.templateDir}/simple/xxx.ftl" />
+<#include
"/${attributes.templateDir}/${attributes.expandTheme}/controlfooter.ftl" />
```
Wrapping is a great way to augment the basic HTML elements provided by the
simple theme.
@@ -59,7 +61,7 @@ parent = xhtml
An extended theme does not need to implement every single template that the
[Struts Tags](struts-tags) expect.
It only needs to implement the templates that change. The other templates are
loaded from the parent template.
-## Special parameters
+## Special attributes
[UIBean](http://struts.apache.org/maven/struts2-core/apidocs/org/apache/struts2/components/UIBean)
provides few
special parameters which can be used to build a new template (they are already
used in `xhtml` and `css_xhtml` theme):
@@ -75,11 +77,11 @@ special parameters which can be used to build a new
template (they are already u
Using `expandTheme` parameter allows to override only some parts of the
theme's templates, e.g. `css.ftl`. You can
define a new theme (set `theme.properties`) and override just single file.
-`${parameters.expandTheme}` is a recurrence which tells `ThemeManager` to load
template from current theme and then
+`${attributes.expandTheme}` is a recurrence which tells `ThemeManager` to load
template from current theme and then
from parent theme (defined in `theme.properties`) and so on.
Please also notice that the `ThemeManager` builds list of possible templates
based on current theme and inherited
themes (`/template/custom/textarea.ftl`, `/template/xhtml/textarea.ftl`,
`/template/simple/textarea.ftl`). This is also
-true for templates which are loaded via `${parameters.expandTheme}`.
+true for templates which are loaded via `${attributes.expandTheme}`.
> See also example [Struts 2 Themes]() or [Creating a Theme in Struts
> 2](http://www.vitarara.org/cms/struts_2_cookbook/creating_a_theme) (Mark
> Menard)
diff --git a/source/tag-developers/form-tags.md
b/source/tag-developers/form-tags.md
index 643560973..6d2b5814d 100644
--- a/source/tag-developers/form-tags.md
+++ b/source/tag-developers/form-tags.md
@@ -42,9 +42,9 @@ All the form tags extend the UIBean class. This base class
provides a set of com
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}`).
+In addition to the common attributes, a special attribute exists for all form
element tags: `form` (`${attributes.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}`.
+the form's ID can be found by calling `${attributes.form.id}`.
## Template-Related Attributes
@@ -134,8 +134,8 @@ If a `value` is not specified, by default, the JavaBean
accessor is used instead
</@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}`).
+While most attributes are exposed to the underlying templates as the same key
as the attribute (`${attributes.label}`),
+the `value` attribute is not. Instead, it can be accessed via the `nameValue`
key (`${attributes.nameValue}`).
The `nameValue` key indicates that the value may have been generated from the
`name` attribute rather than explicitly
defined in the `value` attribute.
diff --git a/source/tag-developers/freemarker-tags.md
b/source/tag-developers/freemarker-tags.md
index 72041dd31..497807f9b 100644
--- a/source/tag-developers/freemarker-tags.md
+++ b/source/tag-developers/freemarker-tags.md
@@ -50,12 +50,14 @@ pages even easier to code. You can even invoke third-party
JSP taglibs as if the
## Attributes and Parameters
+> NOTE: Since Struts 7.x the `parameters` have been replaced with `attributes`
+
Unlike older versions of JSP (in which the [JSP Tags](jsp-tags) are based),
FreeMarker allows for _dynamic attributes_,
-much like JSP 2.0. You can supply attributes to the tags that the tag doesn't
explicitedly support. Those attributes
-that cannot be applied directly to the tag object will be set to the tag's
general-purpose `parameters` Map.
+much like JSP 2.0. You can supply attributes to the tags that the tag doesn't
explicitly support. Those attributes
+that cannot be applied directly to the tag object will be set to the tag's
general-purpose `attributes` Map.
-Suppose we wanted to build an URL in a JSP. The URL needs to take an arbitary
parameter to the query string,
-that (being arbitary) isn't specified on the URL tag. In a JSP, we'd have to
use the `url` and `param` tags together.
+Suppose we wanted to build an URL in a JSP. The URL needs to take an arbitrary
parameter to the query string,
+that (being arbitrary) isn't specified on the URL tag. In a JSP, we'd have to
use the `url` and `param` tags together.
**Creating a URL with a query string (JSP)**
@@ -88,9 +90,9 @@ attribute into the textfield tag, no fuss, no muss.
</@s.form>
```
-In the new template, the description is referenced via the parameters Map:
`${parameters.description}`.
+In the new template, the description is referenced via the attributes Map:
`${attributes.description}`.
-> For simple cases, inline attributes are much easier to use than the param}
tag. But, the `param` tag is more flexible
+> For simple cases, inline attributes are much easier to use than the param
tag. But, the `param` tag is more flexible
> than inline attributes for advanced use cases. For example, `param` can take
> the entire body of the tag and apply
> that as the `value` attribute.
diff --git a/source/tag-developers/freemarker.md
b/source/tag-developers/freemarker.md
index 6a5d73c11..99719521f 100644
--- a/source/tag-developers/freemarker.md
+++ b/source/tag-developers/freemarker.md
@@ -113,15 +113,15 @@ or
Assuming there's a request parameter `myParameter` (eg.
[http://host/myApp/myAction.action?myParameter=one]).
```ftl
-<#if Parameters.myParameter?exists>
- ${Parameters.myParameter}
+<#if attributes.myParameter?exists>
+ ${attributes.myParameter}
</#if>
```
or
```ftl
-<@s.property value="%{#parameters.myParameter}" />
+<@s.property value="%{#attributes.myParameter}" />
```
### Context parameter
diff --git a/source/tag-developers/xhtml-theme.md
b/source/tag-developers/xhtml-theme.md
index d75dc826d..feb021489 100644
--- a/source/tag-developers/xhtml-theme.md
+++ b/source/tag-developers/xhtml-theme.md
@@ -32,7 +32,7 @@ and `controlfooter.ftl` templates are wrapped around the
simple template.
{% remote_file_content
https://raw.githubusercontent.com/apache/struts/main/core/src/main/resources/template/xhtml/text.ftl
%}
{% endhighlight %}
-> The `controlheader.ftl` is referenced using `${parameters.theme}` so that
the code can be reused
+> The `controlheader.ftl` is referenced using `${attributes.theme}` so that
the code can be reused
> by the [ajax theme](ajax-theme).
## XHTML Theme Header