The namespace attribute subdivides action configurations into logical modules, each with its own identifying prefix. Namespaces avoid conflicts between action names. Each namespace can have its own "menu" or "help" action, each with its own implementation. While the prefix appears in the browser URI, the tags are "namespace aware", so the namespace prefix does not need to be embedded in forms and links.
Struts 2 Namespaces are the equivalent of Struts Action 1 modules, but more convenient and flexible.
The default namespace is
"" - an empty string. The default namespace is used as a "catch-all" namespace. If an action configuration is not found in a specified namespace, the default namespace is also be searched. The local/global strategy allows an application to have global action configurations outside of the action element "extends" hierarchy.
A root namespace ("/") is also supported. The root is the namespace when a request directly under the context path is received. As with other namespacenamespaces, it will fall back to the default ("") namespace if a local action is not found.
<package name="default"> <action name="foo" class="mypackage.simpleAction>simpleAction"> <result name="success" type="dispatcher">greeting.jsp</result> </action> <action name="bar" class="mypackage.simpleAction"> <result name="success" type="dispatcher">bar1.jsp</result> </action> </package> <package name="mypackage1" namespace="/"> <action name="moo" class="mypackage.simpleAction"> <result name="success" type="dispatcher">moo.jsp</result> </action> </package> <package name="mypackage2" namespace="/barspace"> <action name="bar" class="mypackage.simpleAction"> <result name="success" type="dispatcher">bar2.jsp</result> </action> </package>
If a request for
/barspace/bar.action is made, the
/barspace namespace is searched and if it is found for the
bar action. If found, the
bar action is executed, else it will fall back to the default namespace. In the Namespace Example, the
bar action does exists exist in the
/barspace namespace. The barspace., so the
bar action will be executed, and if "success" is returned, the request will be forwarded to
In the Namespace Example, if a request for
moo.action is made, the root namespace ('/') is searched for a
moo action; if a root action is not found, the default namespace is checked. In this case, the
moo action does exist and will be selectedexecuted. Upon success, the request would be forwarded to
If a request is made for
Namespace are not hierarchical like a file system path. There is one namespace level. For example if the URL