Versions Compared

Key

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

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, parameters, and so forthlogical 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 , which is "" ( - an empty string), . The default namespace 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. The local/global strategy allows an application to have global action configurations outside of the action element "extends" hierarchy.

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

Root

...

Namespace

Root namespace, which is A root namespace ("/") is also allowed in WebWork. It will be 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 no such a local action alias is not found in it.

Namespace

...

Example

Code Block
xml
xml
<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 this examplethe Namespace Example, the bar alias action does exists exist in the /barspace namespace, so it the bar action will get be executed, and if "success" is returned, the request will be forwarded to bar2.jsp.

note
Tip
titleFalling Back to Foo

If a request is made to /barspace/foo.action, the action foo namespace /barspace will be searched for in a namespace of /barspacechecked for action foo. If the a local action is not found, the action will then be searched for in the default namespace is checked. Unless specified, the default namespace will be "". In our example above, their In the Namespace Example, there is no action foo in the namespace /barspace, therefore the default will be searched checked and /foo.action will be executed.

If In the Namespace Example, if a request for moo.action is made, the root namespace ('/') is searched for 'a moo' action alias, if it ; if a root action is not found it will fall back to trying to find it in , the default namespace is checked. In this examplecase, the moo action alias does exists exist and hence will be executed. Upon sucesssuccess, the request will get would be forwarded to bar2.jsp.Note:

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.