2022-10-27 12:53:05 +02:00
|
|
|
# Struts 2 Convention plugin
|
|
|
|
|
This plugin allows to use _convention over configuration_ approach instead of configuring everything using `struts.xml`.
|
|
|
|
|
You will find more details in [documentation](https://struts.apache.org/plugins/convention/).
|
|
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
Just drop this plugin JAR into `WEB-INF/lib` folder or add it as a Maven dependency.
|
2025-11-24 09:03:30 +01:00
|
|
|
|
|
|
|
|
## Design
|
|
|
|
|
|
|
|
|
|
### Action with no annotations (all the default handlings)
|
|
|
|
|
|
|
|
|
|
Action name is class name.
|
|
|
|
|
|
|
|
|
|
Action package is based on the either any Namespace annotations on the class or Java package the
|
|
|
|
|
action class is defined in or the Java package name and the root Java package, which is determined
|
|
|
|
|
based on the package locators or the action package list. In either case, a root package is
|
|
|
|
|
identified and the namespace is the packages below the root up to and including the package that
|
|
|
|
|
contains the action class.
|
|
|
|
|
|
|
|
|
|
Action method is execute in all cases.
|
|
|
|
|
|
|
|
|
|
Results are built first from the Result annotations at the class level. Next, they are built from
|
|
|
|
|
the resources available in the web application and in the classpath based on the result location,
|
|
|
|
|
namespace of the action and action name (not anything to do with the code element names). Results
|
|
|
|
|
are found for common result codes including, success, error, input, failure, etc. If a specific
|
|
|
|
|
result doesn't exist using the result code then just the action namespace and action name are used to
|
|
|
|
|
locate results. If there are still no results found, than a redirect is added back to the index
|
|
|
|
|
action for the namespace, if one exists.
|
|
|
|
|
|
|
|
|
|
### Action with Action(s) annotations
|
|
|
|
|
|
|
|
|
|
If the annotation is located on any method other than execute, than the action configuration built
|
|
|
|
|
from the annotation is in addition to the action configuration built using the default. Unless there
|
|
|
|
|
is an annotation that contains no value, in which case, the method that annotation is defined for
|
|
|
|
|
becomes the default action method. If the annotation is defined on the execute method, regardless of
|
|
|
|
|
the value of the annotation, no default configuration is built for the class.
|
|
|
|
|
|
|
|
|
|
If multiple annotations have no value, an error should occur.
|
|
|
|
|
If multiple annotations have the same value, an error should occur.
|
|
|
|
|
|
|
|
|
|
Action name is taken from the annotation value. If the value is empty, the default action name
|
|
|
|
|
is used.
|
|
|
|
|
|
|
|
|
|
Action package is taken from the annotation value. If the annotation value doesn't start with a slash
|
|
|
|
|
character, the default action namespace is used.
|
|
|
|
|
|
|
|
|
|
Action method is always the method that the annotation is defined on.
|
|
|
|
|
Results are built first from the array of Results on the Action annotation. Next, they are built
|
|
|
|
|
from the class level Result annotations. Lastly, all default results are created. All Results already
|
|
|
|
|
created during this process should not be overridden later in the process.
|