Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Namespaces

The namespace attribute allows you to segregate subdivides action configurations into namespaces, so that you may use the same action alias in more than one namespace with different classes, 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.

Tip

Struts 2 Namespaces are the equivalent of Struts Action 1 modules, but more convenient and flexible.

Default Namespace

The default namespace is "" - an empty string. The default namespace parameters, etc. This is in contrast to Webwork 1.x, where all action names and aliases were global and could not be re-used in an application. The default namespace, which is "" (an empty string) is used as a "catch-all" namespace, so if . If an action configuration is not found in a specified namespace, the default namespace will is also be searched. This allows you The local/global strategy allows an application to have global action configurations outside of the action element "extends" hierarchy, as well as to allow the previous Webwork 1.x behavior by not specifying namespaces. It is also intended that the namespace functionality can be used for security, for instance by having the path before the action name be used as the namespace by the Webwork 2.0 ServletDispatcher, thus allowing the use of J2EE declarative security on paths to be easily implemented and maintained.

Namespace example

.

The namespace prefix can be registered with Java declarative security, to ensure only authorized users can access the actions in a given namespace.

Root Namespace

A root namespace ("/") is also supported. The root is the namespace when a request directly under the context path is received. As with other namespaces, it will fall back to the default ("") namespace if a local action is not found.

Namespace Example

Code Block
xml
xml
Code Block
<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="mypackagemypackage2" namespace="/barspace"> 

    <action name="bar" class="mypackage.simpleAction"> 
        <result name="success" type="dispatcher">bar2.jsp</result> 
    </action> 

</package>

How the Code Works

If a request for /barspace/bar.action is made, then the package named mypackage is searched and the /barspace namespace is searched for the bar action. If found, the bar action is executed. If success is returned, then bar2.jsp is displayed. Note: , else it will fall back to the default namespace. In the Namespace Example, the bar action does exist in the /barspace namespace, so the bar action will be executed, and if "success" is returned, the request will be forwarded to bar2.jsp.

Tip
titleFalling Back to Foo

If a request is made to /barspace/foo.action, the

...

namespace /barspace will be

...

checked for action foo. If a local action is not found, the default namespace is checked. In the Namespace Example, there is no action foo in the namespace /barspace, therefore the default will be checked and /foo.action will be executed.

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 executed. Upon success, the request would be forwarded to bar2.jsp.

Tip
titleGetting to the Root

If a request is made for /foo.action, the root / namespace will be checked. If foo is found, the root action will be selected. Otherwise, the framework will check the default namespace. In the Namespace Example, the foo action does not exist in the root namespace, so the default namespace is checked, and the default foo action is executed.

Note
titleNamespaces are not a path!

Namespace are not hierarchical like a file system path. There is one namespace level. For example if the URL /barspace/myspace/bar.action is requested, the framework will first look for namespace /barspace/myspace. If the action does not exist at /barspace/myspace, the search will immediately fall back to the default namespace "". The framework will not parse the namespace into a series of "folders". In the Namespace Example, the bar action in the default namespace would be selected.