This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new 091222da8 Updates stage by Jenkins
091222da8 is described below

commit 091222da854b686e9862f8a58d0621dd1f08ddc2
Author: jenkins <[email protected]>
AuthorDate: Tue Jul 14 12:50:34 2026 +0000

    Updates stage by Jenkins
---
 content/core-developers/default-properties.html    | 351 +++++++++++++-
 .../struts-parameter-annotation.html               |  16 +
 content/core-developers/validation.html            |  48 +-
 content/plugins/json/index.html                    |  65 +++
 content/tag-developers/combobox-tag.html           |   3 +-
 content/tag-developers/if-tag.html                 |   3 +-
 content/tag-developers/updownselect-tag.html       | 514 ++++++++++++++++++++-
 content/tag-developers/url-tag.html                |   3 +-
 content/tag-developers/xhtml-theme.html            | 170 ++++++-
 9 files changed, 1151 insertions(+), 22 deletions(-)

diff --git a/content/core-developers/default-properties.html 
b/content/core-developers/default-properties.html
index d0de796e0..148170a28 100644
--- a/content/core-developers/default-properties.html
+++ b/content/core-developers/default-properties.html
@@ -166,8 +166,355 @@ on the classpath, but it is typically found under <code 
class="language-plaintex
 
 <p><strong>default.properties</strong></p>
 
-<figure class="highlight"><pre><code class="language-txt" data-lang="txt">429: 
Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-txt" data-lang="txt">#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+### START SNIPPET: complete_file
+
+### Struts default properties
+### (can be overridden by a struts.properties file in the root of the 
classpath)
+###
+
+### This can be used to set your default locale and encoding scheme
+# struts.locale=en_US
+struts.i18n.encoding=UTF-8
+
+### if specified, the default object factory can be overridden here
+### Note: short-hand notation is supported in some cases, such as "spring"
+###       Alternatively, you can provide a org.apache.struts2.ObjectFactory 
subclass name here
+# struts.objectFactory = spring
+
+### specifies the autoWiring logic when using the SpringObjectFactory.
+### valid values are: name, type, auto, and constructor (name is the default)
+struts.objectFactory.spring.autoWire = name
+
+### indicates to the struts-spring integration if Class instances should be 
cached
+### this should, until a future Spring release makes it possible, be left as 
true
+### unless you know exactly what you are doing!
+### valid values are: true, false (true is the default)
+struts.objectFactory.spring.useClassCache = true
+
+### ensures the autowire strategy is always respected.
+### valid values are: true, false (true is the default)
+struts.objectFactory.spring.autoWire.alwaysRespect=true
+
+### By default SpringObjectFactory doesn't support AOP
+### This flag was added just temporally to check if nothing is broken
+### See https://issues.apache.org/jira/browse/WW-4110
+struts.objectFactory.spring.enableAopSupport = false
+
+### if specified, the default object type determiner can be overridden here
+### Note: short-hand notation is supported in some cases, such as "tiger" or 
"notiger"
+###       Alternatively, you can provide a 
org.apache.struts2.util.ObjectTypeDeterminer implementation name here
+### Note: By default, org.apache.struts2.util.DefaultObjectTypeDeterminer is 
used which handles type detection
+###       using generics. org.apache.struts2.util.GenericsObjectTypeDeterminer 
was deprecated since XWork 2, it's
+###       functions are integrated in DefaultObjectTypeDeterminer now.
+###       To disable tiger support use the "notiger" property value here.
+# struts.objectTypeDeterminer = tiger
+# struts.objectTypeDeterminer = notiger
+
+### Parser to handle HTTP POST requests, encoded using the MIME-type 
multipart/form-data
+# struts.multipart.parser=cos
+# struts.multipart.parser=jakarta-stream
+struts.multipart.parser=jakarta
+### Uses jakarta.servlet.context.tempdir by default
+struts.multipart.saveDir=
+struts.multipart.maxSize=2097152
+struts.multipart.maxFiles=256
+struts.multipart.maxStringLength=4096
+# struts.multipart.maxFileSize=
+
+### Load custom property files (does not override struts.properties!)
+# struts.custom.properties=application,org/apache/struts2/extension/custom
+
+### How request URLs are mapped to and from actions
+### Vy default 'struts' name is used which maps to DefaultActionMapper
+# struts.mapper.class=restful
+
+### Used by the DefaultActionMapper
+### You may provide a comma separated list, e.g. 
struts.action.extension=action,jnlp,do
+### The blank extension allows you to match directory listings as well as pure 
action names
+### without interfering with static resources, which can be specified as an 
empty string
+### prior to a comma e.g. struts.action.extension=, or 
struts.action.extension=x,y,z,,
+struts.action.extension=action,,
+
+### Used by Dispatcher
+### If true then Struts serves static content from inside its jar.
+### If false then the static content must be available at 
&lt;context_path&gt;/static
+struts.serve.static=true
+
+### A path from which a static content is served, it must start with "/"
+### and it cannot end with "/"
+struts.ui.staticContentPath=/static
+
+### Used by FilterDispatcher
+### This is good for development where one wants changes to the static content 
be
+### fetch on each request.
+### NOTE: This will only have effect if struts.serve.static=true
+### If true -&gt; Struts will write out header for static contents such that 
they will
+###             be cached by web browsers (using Date, Cache-Content, Pragma, 
Expires)
+###             headers).
+### If false -&gt; Struts will write out header for static contents such that 
they are
+###            NOT to be cached by web browser (using Cache-Content, Pragma, 
Expires
+###            headers)
+struts.serve.static.browserCache=true
+
+### WebJars support
+### Master switch for resolving/serving WebJar assets under 
&lt;staticContentPath&gt;/webjars/**
+struts.webjars.enabled=true
+### Optional comma-separated allowlist of WebJar names (empty = all WebJars on 
the classpath)
+struts.webjars.allowlist=
+
+### Set this to false if you wish to disable implicit dynamic method invocation
+### via the URL request. This includes URLs like foo!bar.action, as well as 
params
+### like method:bar (but not action:foo).
+### An alternative to implicit dynamic method invocation is to use wildcard
+### mappings, such as &lt;action name="*/*" method="{2}" 
class="actions.{1}"&gt;
+struts.enable.DynamicMethodInvocation = false
+
+### Set this to true if you wish to allow slashes in your action names.  If 
false,
+### Actions names cannot have slashes, and will be accessible via any directory
+### prefix.  This is the traditional behavior expected of WebWork applications.
+### Setting to true is useful when you want to use wildcards and store values
+### in the URL, to be extracted by wildcard patterns, such as
+### &lt;action name="*/*" method="{2}" class="actions.{1}"&gt; to match 
"/foo/edit" or
+### "/foo/save".
+struts.enable.SlashesInActionNames = false
+
+### Disables support for action: prefix
+struts.mapper.action.prefix.enabled = false
+
+### Blocks access to actions in other namespace than current with action: 
prefix
+struts.mapper.action.prefix.crossNamespaces = false
+
+### when set to true, Struts will act much more friendly for developers. This
+### includes:
+### - struts.i18n.reload = true
+### - struts.configuration.xml.reload = true
+### - raising various debug or ignorable problems to errors
+###   For example: normally a request to foo.action?someUnknownField=true 
should
+###                be ignored (given that any value can come from the web and 
it
+###                should not be trusted). However, during development, it may 
be
+###                useful to know when these errors are happening and be told 
of
+###                them right away.
+struts.devMode = false
+
+### when set to true, resource bundles will be reloaded on _every_ request.
+### this is good during development, but should never be used in production
+# struts.i18n.reload=false
+
+### Standard UI theme
+### Change this to reflect which path should be used for JSP control tag 
templates by default
+struts.ui.theme=xhtml
+struts.ui.templateDir=template
+### Change this to use a different token to indicate template theme expansion
+struts.ui.theme.expansion.token=~~~
+### Sets the default template type. Either ftl, vm, or jsp
+struts.ui.templateSuffix=ftl
+
+### Sets a global flag which will escape html body of Anchor, Submit and 
Component tag
+### You can control this flag per tag, e.g.: &lt;s:a ... 
escapeHtmlTag="true"&gt;...&lt;/s:a&gt;
+### and this take precedence over the global flag
+# struts.ui.escapeHtmlBody=true
+
+### Configuration reloading
+### This will cause the configuration to reload struts.xml when it is changed
+# struts.configuration.xml.reload=false
+
+### Location of velocity.properties file.  defaults to velocity.properties
+struts.velocity.configfile = velocity.properties
+
+### Comma separated list of VelocityContext classnames to chain to the 
StrutsVelocityContext
+struts.velocity.contexts =
+
+### Location of the velocity toolbox
+struts.velocity.toolboxlocation=
+
+### used to build URLs, such as the UrlTag
+struts.url.http.port = 80
+struts.url.https.port = 443
+### possible values are: none, get or all
+struts.url.includeParams = none
+
+### Load custom default resource bundles
+# struts.custom.i18n.resources=testmessages,testmessages2
+
+### Control whether to search the default resource bundes for messages first 
(if true) or not (if false).
+### Default is false (when not set).
+# struts.i18n.search.defaultbundles.first=false
+
+### workaround for some app servers that don't handle 
HttpServletRequest.getParameterMap()
+### often used for WebLogic, Orion, and OC4J
+struts.dispatcher.parametersWorkaround = false
+
+### configure the Freemarker Manager class to be used
+### Allows user to plug-in customised Freemarker Manager if necessary
+### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
+# 
struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
+
+### Enables caching of FreeMarker templates
+### Has the same effect as copying the templates under WEB_APP/templates
+# struts.freemarker.templatesCache=false
+
+### Enables caching of models on the BeanWrapper
+struts.freemarker.beanwrapperCache=false
+
+### See the StrutsBeanWrapper javadocs for more information
+struts.freemarker.wrapper.altMap=true
+
+### maxStrongSize for MruCacheStorage for freemarker, when set to 0 
SoftCacheStorage which performs better in heavy loaded application
+### check WW-3766 for more details
+struts.freemarker.mru.max.strong.size=0
+
+### Controls FreeMarker whitespace stripping during template compilation.
+### Automatically disabled when devMode is enabled.
+struts.freemarker.whitespaceStripping=true
+
+### Controls whether the compress tag is enabled globally.
+struts.tag.compress.enabled=true
+
+### Maximum size (in bytes) of body content that can be compressed.
+### Content exceeding this limit will be skipped without compression.
+### Default: 10MB (10485760 bytes)
+struts.tag.compress.maxSize=10485760
+
+### Maximum length of body content to include in log messages.
+### Content longer than this will be truncated with length indicator.
+### Default: 200 characters
+struts.tag.compress.log.maxLength=200
+
+### configure the XSLTResult class to use stylesheet caching.
+### Set to true for developers and false for production.
+struts.xslt.nocache=false
+
+### Whether to always select the namespace to be everything before the last 
slash or not
+struts.mapper.alwaysSelectFullNamespace=true
+
+### Whether to fallback to empty namespace when request namespace does not 
match any in configuration
+struts.actionConfig.fallbackToEmptyNamespace=false
+
+### Whether to allow static field access in OGNL expressions, not recommended!
+struts.ognl.allowStaticFieldAccess=false
+
+### Whether OGNL can access these types of classes, not recommended!
+struts.disallowDefaultPackageAccess=true
+struts.disallowProxyObjectAccess=true
+
+### Whether OGNL can instantiate arbitrary map classes, not recommended!
+struts.ognl.disallowCustomOgnlMap=true
+
+### OGNL context access, highly recommended to uncomment if context access 
from expressions not needed!
+# struts.ognl.valueStackFallbackToContext=false
+# 
struts.ognl.excludedNodeTypes=ognl.ASTRootVarRef,ognl.ASTThisVarRef,ognl.ASTVarRef
+
+### Whether to enable OGNL allowlist, protects against critical 
vulnerabilities, strongly recommended to keep enabled!
+struts.allowlist.enable=true
+### Whether to require @StrutsParameter annotations on Action parameter 
injection methods
+### Synergizes with OGNL allowlist, strongly recommended to keep enabled!
+struts.parameters.requireAnnotations=true
+### Whether to drop @StrutsParameter annotation requirement on simple setter 
methods
+### Useful for transitioning legacy applications, but highly recommended to 
set to false as soon as possible!
+struts.parameters.requireAnnotations.transitionMode=false
+
+### Whether ChainingInterceptor enforces @StrutsParameter on the target action 
when copying properties.
+### Opt-in hardening; default false preserves legacy chaining behaviour. Only 
has effect when
+### struts.parameters.requireAnnotations is also enabled.
+struts.chaining.requireAnnotations=false
+
+### Whether to throw a RuntimeException when a property is not found
+### in an expression, or when the expression evaluation fails
+struts.el.throwExceptionOnFailure=false
+
+### Logs as Warnings properties that are not found (very verbose)
+struts.ognl.logMissingProperties=false
+
+### Specify the OGNL expression cache factory and BeanInfo cache factory to 
use.
+### Currently, the default implementations are used, but can be replaced with 
custom ones if desired.
+# struts.ognl.expressionCacheFactory=customOgnlExpressionCacheFactory
+# struts.ognl.beanInfoCacheFactory=customOgnlBeanInfoCacheFactory
+
+### Specifies the type of cache to use for parsed OGNL expressions. See 
StrutsConstants class for further information.
+struts.ognl.expressionCacheType=wtlfu
+
+### Specifies the maximum cache size for parsed OGNL expressions. This should 
be configured based on the cache type
+### chosen and application-specific needs.
+struts.ognl.expressionCacheMaxSize=10000
+
+### Specifies the type of cache to use for BeanInfo objects. See 
StrutsConstants class for further information.
+struts.ognl.beanInfoCacheType=wtlfu
+
+### Specifies the maximum cache size for BeanInfo objects. This should be 
configured based on the cache type chosen and
+### application-specific needs.
+struts.ognl.beanInfoCacheMaxSize=10000
+
+### Specifies the type of cache to use for proxy detection. See 
StrutsConstants class for further information.
+struts.proxy.cacheType=wtlfu
+
+### Specifies the maximum cache size for proxy detection caches.
+struts.proxy.cacheMaxSize=10000
+
+### Specifies the ProxyCacheFactory implementation class.
+struts.proxy.cacheFactory=struts
+
+### Specifies the ProxyService implementation class.
+struts.proxyService=struts
+
+### Indicates if Dispatcher should handle unexpected exceptions by calling 
sendError()
+### or simply rethrow it as a ServletException to allow future processing by 
other frameworks like Spring Security
+struts.handle.exception=true
+
+### Applies maximum length allowed on OGNL expressions for security 
enhancement (optional)
+###
+### **WARNING**: If developers change this option (by configuration) they 
should make sure that they understand
+###   the implications of setting 'struts.ognl.expressionMaxLength'. They must 
choose a value large enough to permit
+###   ALL valid OGNL expressions used within the application. Values larger 
than the 200-400 range have diminishing
+###   security value (at which point it is really only a "style guard" for 
long OGNL expressions in an application.
+###   Setting a value of null or "" will also disable the feature.
+struts.ognl.expressionMaxLength=256
+
+### Defines which named instance of DateFormatter to use, there are two 
instances:
+### - simpleDateFormatter (based on SimpleDateFormat)
+### - dateTimeFormatter (based on Java 8 Date/Time API)
+### These formatters are using a slightly different patterns, please check 
JavaDocs of both and more details is in WW-5016
+struts.date.formatter=dateTimeFormatter
+
+### Defines which instance of QueryStringBuilder to use, Struts provides just 
one instance:
+### - strutsQueryStringBuilder
+### The builder is used by UrlHelp to create a proper Query String out of 
provided parameters map
+struts.url.queryStringBuilder=strutsQueryStringBuilder
+
+### Defines which instance of QueryStringParser to use, Struts provides just 
one instance:
+### - strutsQueryStringParser
+### The parser is used to parse Query String into a map
+struts.url.queryStringParser=strutsQueryStringParser
+
+### Defines which instances of encoder and decoder to use, Struts provides one 
default implementation for each
+struts.url.encoder=strutsUrlEncoder
+struts.url.decoder=strutsUrlDecoder
+
+### Defines source to read nonce value from, possible values are: request, 
session
+struts.csp.nonceSource=session
+
+### Checkbox hidden field prefix
+### Default prefix for backward compatibility. Change to "struts_checkbox_" 
for HTML5 validation.
+struts.ui.checkbox.hiddenPrefix=__checkbox_
+
+### END SNIPPET: complete_file</code></pre></figure>
 
 
   </section>
diff --git a/content/core-developers/struts-parameter-annotation.html 
b/content/core-developers/struts-parameter-annotation.html
index 7851c8912..561718867 100644
--- a/content/core-developers/struts-parameter-annotation.html
+++ b/content/core-developers/struts-parameter-annotation.html
@@ -308,6 +308,22 @@ collection or map needs <code class="language-plaintext 
highlighter-rouge">depth
 <span class="o">}</span>
 </code></pre></div></div>
 
+<p class="alert alert-warning"><strong>Struts 7.3.0 behavior change 
(JSON/REST).</strong> When a JSON or REST payload
+populates a collection of <em>simple</em> types element by element — e.g.
+<code class="language-plaintext 
highlighter-rouge">{"mySelection":["A","B"]}</code> binds to <code 
class="language-plaintext highlighter-rouge">mySelection[0]</code>, <code 
class="language-plaintext highlighter-rouge">mySelection[1]</code> — the
+element paths are now authorized on the <strong>getter</strong> at <code 
class="language-plaintext highlighter-rouge">depth = 1</code>, matching how
+the <a href="parameters-interceptor.html">Parameters Interceptor</a> gates the 
flat name
+<code class="language-plaintext highlighter-rouge">mySelection[0]</code>. 
Previously the JSON path checked only the container setter
+(<code class="language-plaintext highlighter-rouge">depth = 0</code>). If your 
action populates a scalar collection from a JSON/REST body
+under <code class="language-plaintext 
highlighter-rouge">requireAnnotations</code>, annotate the getter as well:</p>
+<div class="language-java highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nd">@StrutsParameter</span><span 
class="o">(</span><span class="n">depth</span> <span class="o">=</span> <span 
class="mi">1</span><span class="o">)</span>
+<span class="kd">public</span> <span class="nc">List</span><span 
class="o">&lt;</span><span class="nc">String</span><span class="o">&gt;</span> 
<span class="nf">getMySelection</span><span class="o">()</span> <span 
class="o">{</span>
+    <span class="k">return</span> <span class="n">mySelection</span><span 
class="o">;</span>
+<span class="o">}</span>
+</code></pre></div></div>
+<p>List-of-objects payloads (<code class="language-plaintext 
highlighter-rouge">items[0].name</code>, <code class="language-plaintext 
highlighter-rouge">depth = 2</code>) are unaffected — they
+already required the annotated getter.</p>
+
 <p>When populating properties of objects that are already in a collection, 
annotate the
 getter. Because reaching an element’s property requires indexing into the 
collection
 <em>and then</em> following the property, this needs <code 
class="language-plaintext highlighter-rouge">depth = 2</code> (see
diff --git a/content/core-developers/validation.html 
b/content/core-developers/validation.html
index 3b510bdee..88286de1c 100644
--- a/content/core-developers/validation.html
+++ b/content/core-developers/validation.html
@@ -249,8 +249,52 @@ to have many field-validators which is almost always the 
case.</p>
 <p>The following list shows the default validators included in the framework 
and is an example of the syntax used to declare 
 our own validators.</p>
 
-<figure class="highlight"><pre><code class="language-xml" data-lang="xml">429: 
Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-xml" 
data-lang="xml"><span class="cp">&lt;?xml version="1.0" 
encoding="UTF-8"?&gt;</span>
+<span class="c">&lt;!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+--&gt;</span>
+<span class="cp">&lt;!DOCTYPE validators PUBLIC
+        "-//Apache Struts//XWork Validator Definition 1.0//EN"
+        
"https://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"&gt;</span>
+
+<span class="c">&lt;!-- START SNIPPET: validators-default --&gt;</span>
+<span class="nt">&lt;validators&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"required"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.RequiredFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"requiredstring"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.RequiredStringValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"int"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.IntRangeFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"long"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.LongRangeFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"short"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.ShortRangeFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"double"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.DoubleRangeFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"date"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.DateRangeFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"expression"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.ExpressionValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"fieldexpression"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.FieldExpressionValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"email"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.EmailValidator"</span><span 
class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"creditcard"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.CreditCardValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"url"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.URLValidator"</span><span 
class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"visitor"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.VisitorFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"conversion"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.ConversionErrorFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"stringlength"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.StringLengthFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"regex"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.RegexFieldValidator"</span><span
 class="nt">/&gt;</span>
+    <span class="nt">&lt;validator</span> <span class="na">name=</span><span 
class="s">"conditionalvisitor"</span> <span class="na">class=</span><span 
class="s">"org.apache.struts2.validator.validators.ConditionalVisitorFieldValidator"</span><span
 class="nt">/&gt;</span>
+<span class="nt">&lt;/validators&gt;</span>
+<span class="c">&lt;!--  END SNIPPET: validators-default 
--&gt;</span></code></pre></figure>
 
 <blockquote>
   <p><strong>Struts 2.1 and Prior</strong>
diff --git a/content/plugins/json/index.html b/content/plugins/json/index.html
index 43f07cc62..efe51fe41 100644
--- a/content/plugins/json/index.html
+++ b/content/plugins/json/index.html
@@ -183,6 +183,7 @@
       <li><a href="#accepting-json" id="markdown-toc-accepting-json">Accepting 
JSON</a></li>
       <li><a href="#deserialization-limits" 
id="markdown-toc-deserialization-limits">Deserialization limits</a></li>
       <li><a href="#parameter-authorization" 
id="markdown-toc-parameter-authorization">Parameter authorization</a></li>
+      <li><a href="#input-parameter-filtering" 
id="markdown-toc-input-parameter-filtering">Input parameter filtering</a></li>
     </ul>
   </li>
   <li><a href="#json-rpc" id="markdown-toc-json-rpc">JSON RPC</a></li>
@@ -816,6 +817,70 @@ annotation <strong>per property, during 
deserialization</strong> — unauthorize
 never set on the target object. Annotate the action properties that may be
 populated from the JSON request body.</p>
 
+<h3 id="input-parameter-filtering">Input parameter filtering</h3>
+
+<p>Since Struts 7.3.0, populating an action from a JSON request body applies 
the
+same name/value acceptability controls that the
+<a href="../../core-developers/parameters-interceptor.html">Parameters 
Interceptor</a>
+applies to ordinary HTTP request parameters. Filtering uses the same
+dotted/indexed key paths as form parameters (<code class="language-plaintext 
highlighter-rouge">address.city</code>, <code class="language-plaintext 
highlighter-rouge">items[0].name</code>),
+so the shared pattern checkers behave identically on JSON and form input.
+Population itself stays pure reflection over bean setters — no OGNL name
+evaluation is introduced on the JSON path.</p>
+
+<p>The following controls are <strong>always on</strong>:</p>
+
+<ul>
+  <li><strong>Excluded and accepted name patterns</strong> — the same 
framework-wide
+accepted/excluded parameter-name patterns the Parameters Interceptor uses. A
+JSON key whose full dotted/indexed path matches an excluded pattern, or fails
+to match any accepted pattern, is not populated.</li>
+  <li><strong>Maximum key-path length</strong> — set with the <code 
class="language-plaintext highlighter-rouge">paramNameMaxLength</code> 
interceptor
+param (default <code class="language-plaintext highlighter-rouge">100</code>). 
JSON keys whose full dotted path is longer are rejected.</li>
+  <li><strong><code class="language-plaintext 
highlighter-rouge">ParameterNameAware</code> / <code class="language-plaintext 
highlighter-rouge">ParameterValueAware</code></strong> action callbacks — 
honored for
+JSON input exactly as for form parameters.</li>
+  <li><strong><code class="language-plaintext 
highlighter-rouge">@StrutsParameter</code> authorization</strong> — see
+<a href="#parameter-authorization">Parameter authorization</a> above.</li>
+</ul>
+
+<p>The following controls are <strong>opt-in</strong> — disabled by default to 
preserve existing
+behavior for permissive JSON apps:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Interceptor param</th>
+      <th>Default</th>
+      <th>Effect</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">acceptedValuePatterns</code></td>
+      <td><em>(none)</em></td>
+      <td>Comma-delimited regular expressions; when set, only JSON leaf 
<strong>values</strong> matching one of them are accepted (matching is 
case-insensitive).</td>
+    </tr>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">excludedValuePatterns</code></td>
+      <td><em>(none)</em></td>
+      <td>Comma-delimited regular expressions; JSON leaf 
<strong>values</strong> matching any of them are removed (matching is 
case-insensitive).</td>
+    </tr>
+    <tr>
+      <td><code class="language-plaintext 
highlighter-rouge">applyPropertyFiltersToInput</code></td>
+      <td><code class="language-plaintext highlighter-rouge">false</code></td>
+      <td>When <code class="language-plaintext highlighter-rouge">true</code>, 
the interceptor’s own <code class="language-plaintext 
highlighter-rouge">excludeProperties</code> / <code class="language-plaintext 
highlighter-rouge">includeProperties</code> patterns — otherwise used only for 
serialization output — also gate which JSON keys are populated on 
<strong>input</strong>.</td>
+    </tr>
+  </tbody>
+</table>
+
+<div class="language-xml highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code><span class="nt">&lt;interceptor-ref</span> <span 
class="na">name=</span><span class="s">"json"</span><span class="nt">&gt;</span>
+  <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"paramNameMaxLength"</span><span class="nt">&gt;</span>120<span 
class="nt">&lt;/param&gt;</span>
+  <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"acceptedValuePatterns"</span><span 
class="nt">&gt;</span>[\w\s.@-]+<span class="nt">&lt;/param&gt;</span>
+  <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"applyPropertyFiltersToInput"</span><span 
class="nt">&gt;</span>true<span class="nt">&lt;/param&gt;</span>
+  <span class="nt">&lt;param</span> <span class="na">name=</span><span 
class="s">"excludeProperties"</span><span 
class="nt">&gt;</span>login.password<span class="nt">&lt;/param&gt;</span>
+<span class="nt">&lt;/interceptor-ref&gt;</span>
+</code></pre></div></div>
+
 <h2 id="json-rpc">JSON RPC</h2>
 
 <p>The json plugin can be used to execute action methods from javascript and 
return the output. This feature was developed 
diff --git a/content/tag-developers/combobox-tag.html 
b/content/tag-developers/combobox-tag.html
index d92198233..1e2772e62 100644
--- a/content/tag-developers/combobox-tag.html
+++ b/content/tag-developers/combobox-tag.html
@@ -170,8 +170,7 @@ or content separately. Each of these is simply populated 
from the toString() met
 this is because the select box isn’t intended to actually submit useful data, 
but to assist the user in filling
 out the text field.</p>
 
-<p>429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</p>
+<p>Widget that fills a text box from a select</p>
 
 <h2 id="attributes">Attributes</h2>
 
diff --git a/content/tag-developers/if-tag.html 
b/content/tag-developers/if-tag.html
index a12803c87..44ef6570a 100644
--- a/content/tag-developers/if-tag.html
+++ b/content/tag-developers/if-tag.html
@@ -161,8 +161,7 @@
 <p>Perform basic condition flow. <code class="language-plaintext 
highlighter-rouge">if</code> tag could be used by itself or can be followed by 
zero or more <code class="language-plaintext highlighter-rouge">elseif</code> 
tags 
 followed by zero or one <code class="language-plaintext 
highlighter-rouge">else</code> tag.</p>
 
-<p>429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</p>
+<p>If tag</p>
 
 <h2 id="attributes">Attributes</h2>
 
diff --git a/content/tag-developers/updownselect-tag.html 
b/content/tag-developers/updownselect-tag.html
index 79ab0bd41..0aada3f23 100644
--- a/content/tag-developers/updownselect-tag.html
+++ b/content/tag-developers/updownselect-tag.html
@@ -169,8 +169,518 @@ form is submitted, its elements will be submitted in the 
order they are arranged
 
 <h2 id="attributes">Attributes</h2>
 
-<p>429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</p>
+<table class="tag-reference">
+    <tr>
+        <td colspan="6"><h4>Dynamic Attributes Allowed:</h4> false</td>
+    </tr>
+    <tr>
+        <td colspan="6"><hr /></td>
+    </tr>
+    <tr>
+        <th class="tag-header"><h4>Name</h4></th>
+        <th class="tag-header"><h4>Required</h4></th>
+        <th class="tag-header"><h4>Default</h4></th>
+        <th class="tag-header"><h4>Evaluated</h4></th>
+        <th class="tag-header"><h4>Type</h4></th>
+        <th class="tag-header"><h4>Description</h4></th>
+    </tr>
+    <tr>
+        <td class="tag-attribute">accesskey</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html accesskey attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">allowMoveDown</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">true</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Whether move down button should be 
displayed</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">allowMoveUp</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">true</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Whether move up button should be 
displayed</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">allowSelectAll</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">true</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Whether or not select all button should be 
displayed</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">cssClass</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The css class to use for element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">cssErrorClass</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The css error class to use for element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">cssErrorStyle</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The css error style definitions for element 
to use</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">cssStyle</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The css style definitions for element to 
use</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">disabled</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html disabled attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">emptyOption</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Whether or not to add an empty (--) option 
after the header option</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">errorPosition</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Define error position of form element 
(top|bottom)</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">headerKey</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute"> Key for first item in list. Must not be 
empty! '-1' and '' is correct, '' is bad.</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">headerValue</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Value expression for first item in list</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">id</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">HTML id attribute</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">javascriptTooltip</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Use JavaScript to generate tooltips</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">key</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the key (name, value, label) for this 
particular component</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">label</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Label expression used for rendering an 
element specific label</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">labelPosition</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Define label position of form element 
(top/left)</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">labelSeparator</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">:</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">String that will be appended to the 
label</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">list</td>
+        <td class="tag-attribute"><strong>true</strong></td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Iterable source to populate from. If the 
list is a Map (key, value), the Map key will become the option 'value' 
parameter and the Map value will become the option body.</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listCssClass</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get css class 
from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listCssStyle</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get css style 
from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listKey</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get field value 
from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listLabelKey</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to be used to 
lookup for localised version of field label</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listTitle</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get title 
from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listValue</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get field 
content from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">listValueKey</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Property of list objects to get field value 
label from</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">moveDownLabel</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">v</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Text to display on the move down button</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">moveUpLabel</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">^</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Text to display on the move up button</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">multiple</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute"> Creates a multiple select. The tag will 
pre-select multiple values if the values are passed as an Array or a 
Collection(of appropriate types) via the value attribute. If one of the keys 
equals one of the values in the Collection or Array it wil be selected</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">name</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The name to set for element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onblur</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute"> Set the html onblur attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onchange</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onchange attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onclick</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onclick attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">ondblclick</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html ondblclick attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onfocus</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onfocus attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onkeydown</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onkeydown attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onkeypress</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onkeypress attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onkeyup</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onkeyup attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onmousedown</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onmousedown attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onmousemove</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onmousemove attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onmouseout</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onmouseout attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onmouseover</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onmouseover attribute on 
rendered html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onmouseup</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onmouseup attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">onselect</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html onselect attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">performClearTagStateForTagPoolingServers</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">Whether to clear all tag state during 
doEndTag() processing (if applicable)</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">requiredLabel</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Boolean</td>
+        <td class="tag-attribute">If set to true, the rendered element will 
indicate that input is required</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">requiredPosition</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Define required position of required form 
element (left|right)</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">selectAllLabel</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">*</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Text to display on the select all button</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">size</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Integer</td>
+        <td class="tag-attribute">Size of the element box (# of elements to 
show)</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">style</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The css style definitions for element to use 
- it's an alias of cssStyle attribute.</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tabindex</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html tabindex attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">template</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The template (other than default) to use for 
rendering the element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">templateDir</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The template directory.</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">theme</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">The theme (other than default) to use for 
rendering the element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">title</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the html title attribute on rendered 
html element</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tooltip</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Set the tooltip of this particular 
component</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tooltipConfig</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Deprecated. Use individual tooltip 
configuration attributes instead.</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tooltipCssClass</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">StrutsTTClassic</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">CSS class applied to JavaScrip tooltips</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tooltipDelay</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">Classic</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Delay in milliseconds, before showing 
JavaScript tooltips </td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">tooltipIconPath</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Icon path used for image that will have the 
tooltip</td>
+    </tr>
+    <tr>
+        <td class="tag-attribute">value</td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute"></td>
+        <td class="tag-attribute">false</td>
+        <td class="tag-attribute">String</td>
+        <td class="tag-attribute">Preset the value of input element.</td>
+    </tr>
+</table>
 
 <h2 id="examples">Examples</h2>
 
diff --git a/content/tag-developers/url-tag.html 
b/content/tag-developers/url-tag.html
index 02fae8b47..2e5d4a59a 100644
--- a/content/tag-developers/url-tag.html
+++ b/content/tag-developers/url-tag.html
@@ -201,8 +201,7 @@ because the parameter defined in the <code 
class="language-plaintext highlighter
   <p><strong>NOTE</strong>: As of Struts 2.1.3 the includeParams constant 
defaults to <code class="language-plaintext highlighter-rouge">none</code>.</p>
 </blockquote>
 
-<p>429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</p>
+<p>This tag is used to create a URL</p>
 
 <h2 id="attributes">Attributes</h2>
 
diff --git a/content/tag-developers/xhtml-theme.html 
b/content/tag-developers/xhtml-theme.html
index 829a9fe07..7550997b6 100644
--- a/content/tag-developers/xhtml-theme.html
+++ b/content/tag-developers/xhtml-theme.html
@@ -218,8 +218,34 @@ by the <a href="ajax-theme">ajax theme</a>.</p>
 <p>Now let’s look at the <code class="language-plaintext 
highlighter-rouge">controlheader.ftl</code> and <code class="language-plaintext 
highlighter-rouge">controlheader-core.ftl</code>. Again, these are split up for 
easy re-use with 
 the <a href="ajax-theme">ajax theme</a>) contents:</p>
 
-<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">&lt;#--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+--&gt;
+&lt;#include 
"/${attributes.templateDir}/${attributes.expandTheme}/controlheader-core.ftl" 
/&gt;
+    &lt;td&lt;#rt/&gt;
+&lt;#if attributes.align?? &gt;
+ class="align-${attributes.align}"&lt;#rt/&gt;
+&lt;#else &gt;
+ class="tdInput"&lt;#rt/&gt;
+&lt;/#if&gt;
+&gt;&lt;#t/&gt;</code></pre></figure>
 
 <figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">&lt;#--
 /*
@@ -317,8 +343,41 @@ by this theme. See <a href="template-loading">Template 
Loading</a> for more info
 <p>The primary objective of <code class="language-plaintext 
highlighter-rouge">controlfooter.ftl</code> is to close the table. But, before 
the table closes, the template checks 
 for an <code class="language-plaintext highlighter-rouge">after</code> 
parameter.</p>
 
-<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">&lt;#--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+--&gt;
+${attributes.after!}&lt;#t/&gt;
+    &lt;/td&gt;&lt;#lt/&gt;
+&lt;/tr&gt;
+&lt;#if (attributes.errorposition!"top") == 'bottom'&gt;
+&lt;#assign hasFieldErrors = attributes.name?? &amp;&amp; fieldErrors?? 
&amp;&amp; fieldErrors.get(attributes.name)??/&gt;
+&lt;#if hasFieldErrors&gt;
+&lt;#list fieldErrors.get(attributes.name) as error&gt;
+&lt;tr errorFor="${attributes.id}"&gt;
+    &lt;td class="tdErrorMessage" colspan="2"&gt;&lt;#rt/&gt;
+        &lt;span class="errorMessage"&gt;${error}&lt;/span&gt;&lt;#t/&gt;
+    &lt;/td&gt;&lt;#lt/&gt;
+&lt;/tr&gt;
+&lt;/#list&gt;
+&lt;/#if&gt;
+&lt;/#if&gt;</code></pre></figure>
 
 <p>While <code class="language-plaintext highlighter-rouge">after</code> isn’t 
an attribute supported by any of the <a href="struts-tags">Struts Tags</a>, if 
you are using 
 <a href="freemarker-tags">FreeMarker Tags</a>, <a 
href="velocity-tags">Velocity Tags</a>, or the <a href="param-tag">param</a> 
tag in any 
@@ -334,13 +393,75 @@ template renders. The <code class="language-plaintext 
highlighter-rouge">after</
 <p>The xhtml <a href="head-tag">head</a> template extends the <em>simple head 
template</em> and provides an additional CSS that helps 
 render the form elements.</p>
 
-<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">&lt;#--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+--&gt;
+&lt;@s.link rel="stylesheet" 
href="${base}${attributes.staticContentPath}/xhtml/styles.css" type="text/css" 
/&gt;
+&lt;#include "/${attributes.templateDir}/simple/head.ftl" 
/&gt;</code></pre></figure>
 
 <p>The head template imports a style sheet. The contents of 
<strong>styles.css</strong> are:</p>
 
-<figure class="highlight"><pre><code class="language-css" 
data-lang="css"><span class="err">429</span><span class="o">:</span> <span 
class="nt">Too</span> <span class="nt">Many</span> <span 
class="nt">Requests</span>
-<span class="nt">For</span> <span class="nt">more</span> <span 
class="nt">on</span> <span class="nt">scraping</span> <span 
class="nt">GitHub</span> <span class="nt">and</span> <span 
class="nt">how</span> <span class="nt">it</span> <span class="nt">may</span> 
<span class="nt">affect</span> <span class="nt">your</span> <span 
class="nt">rights</span><span class="o">,</span> <span class="nt">please</span> 
<span class="nt">review</span> <span class="nt">our</span> <span 
class="nt">Terms</span [...]
+<figure class="highlight"><pre><code class="language-css" 
data-lang="css"><span class="c">/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */</span>
+
+<span class="nc">.wwFormTable</span> <span class="p">{}</span>
+<span class="nc">.label</span> <span class="p">{</span><span 
class="nl">font-style</span><span class="p">:</span><span 
class="nb">italic</span><span class="p">;</span> <span class="p">}</span>
+<span class="nc">.errorLabel</span> <span class="p">{</span><span 
class="nl">font-style</span><span class="p">:</span><span 
class="nb">italic</span><span class="p">;</span> <span 
class="nl">color</span><span class="p">:</span><span class="no">red</span><span 
class="p">;</span> <span class="p">}</span>
+<span class="nc">.errorMessage</span> <span class="p">{</span><span 
class="nl">font-weight</span><span class="p">:</span><span 
class="nb">bold</span><span class="p">;</span> <span 
class="nl">color</span><span class="p">:</span><span class="no">red</span><span 
class="p">;</span> <span class="p">}</span>
+<span class="nc">.checkboxLabel</span> <span class="p">{}</span>
+<span class="nc">.checkboxErrorLabel</span> <span class="p">{</span><span 
class="nl">color</span><span class="p">:</span><span class="no">red</span><span 
class="p">;</span> <span class="p">}</span>
+<span class="nc">.required</span> <span class="p">{</span><span 
class="nl">color</span><span class="p">:</span><span class="no">red</span><span 
class="p">;}</span>
+<span class="nc">.tdLabel</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">right</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;</span> <span class="p">}</span>
+
+<span class="nc">.tdTransferSelect</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">center</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">middle</span><span class="p">;}</span>
+<span class="nc">.tdLabelTop</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">left</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;}</span>
+<span class="nc">.tdCheckboxLabel</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">right</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;}</span>
+<span class="nc">.tdCheckboxInput</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">left</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;}</span>
+<span class="nc">.tdCheckboxErrorMessage</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">left</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;}</span>
+<span class="nc">.tdErrorMessage</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">center</span><span class="p">;</span> <span 
class="nl">vertical-align</span><span class="p">:</span><span 
class="nb">top</span><span class="p">;}</span>
+<span class="nc">.formButton</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">right</span><span class="p">;}</span>
+<span class="nc">.tdInput</span> <span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">left</span><span class="p">;}</span>
+
+
+<span class="nc">.align-center</span><span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">center</span><span class="p">;}</span>
+<span class="nc">.align-right</span><span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">right</span><span class="p">;}</span>
+<span class="nc">.align-left</span><span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">left</span><span class="p">;}</span>
+<span class="nc">.align-justify</span><span class="p">{</span><span 
class="nl">text-align</span><span class="p">:</span><span 
class="nb">justify</span><span class="p">;}</span></code></pre></figure>
 
 <h3 id="form-template">form template</h3>
 
@@ -348,8 +469,37 @@ For more on scraping GitHub and how it may affect your 
rights, please review our
 wrapping table, the opening and closing templates also, if the <code 
class="language-plaintext highlighter-rouge">validate</code> parameter is set 
to true, enable 
 <a href="../core-developers/pure-java-script-client-side-validation">Pure 
JavaScript Client Side Validation</a>.</p>
 
-<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">429: Too Many Requests
-For more on scraping GitHub and how it may affect your rights, please review 
our Terms of Service 
(https://docs.github.com/en/site-policy/github-terms/github-terms-of-service).</code></pre></figure>
+<figure class="highlight"><pre><code class="language-freemarker" 
data-lang="freemarker">&lt;#--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+--&gt;
+&lt;#include 
"/${attributes.templateDir}/${attributes.expandTheme}/form-validate.ftl" /&gt;
+&lt;#include 
"/${attributes.templateDir}/${attributes.expandTheme}/form-common.ftl" /&gt;
+&lt;#if (attributes.validate!false)&gt;
+  onreset="&lt;#outputformat 
'JavaScript'&gt;${attributes.onreset!'clearErrorMessages(this);clearErrorLabels(this);'}&lt;/#outputformat&gt;"
+&lt;#else&gt;
+  &lt;#if attributes.onreset??&gt;
+  onreset="&lt;#outputformat 
'JavaScript'&gt;${attributes.onreset}&lt;/#outputformat&gt;"
+  &lt;/#if&gt;
+&lt;/#if&gt;
+&gt;
+&lt;#include 
"/${attributes.templateDir}/${attributes.expandTheme}/control.ftl" 
/&gt;</code></pre></figure>
 
 <p>The closing template, <code class="language-plaintext 
highlighter-rouge">form-close.ftl</code>:</p>
 

Reply via email to