struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jasper Rosenberg (JIRA)" <j...@apache.org>
Subject [jira] [Created] (WW-4164) Improve support for multiple extensions
Date Thu, 01 Aug 2013 13:35:48 GMT
Jasper Rosenberg created WW-4164:
------------------------------------

             Summary: Improve support for multiple extensions
                 Key: WW-4164
                 URL: https://issues.apache.org/jira/browse/WW-4164
             Project: Struts 2
          Issue Type: Improvement
          Components: XML Configuration
    Affects Versions: 2.3.15.1
            Reporter: Jasper Rosenberg


Currently if you support multiple extensions (eg. struts.action.extension=action,html,,) there
is no way to tell struts for a particular action which extension you always want to use. 
This has two downsides:

1. When struts has to generate an url, for example in the form tag, or the "redirectAction"
result type, there is no way to specify the extension to use, so it ends up using the current
invocation's extension if possible, or otherwise the default, neither of which might be correct.

2. You can invoke the action with any of the supported extensions, creating duplicate pages
with no clear canonical version.  (Bad for SEO as well)

What I propose is allowing the user to specify an optional specific extension at the package
and action level in the struts xml configuration like so:

{code:xml}
  <package name="test" namespace="/" extends="default" extension="action">
    <action name="a1" extension="">
      <result>a1.ftl</result>
    </action>

    <action name="b1" extension="html">
      <result>b1.ftl</result>
    </action>

    <action name="c1">
      <result>b1.ftl</result>
    </action>
  </package>
{code}

1. When selecting an extension when building an URL for an action, it would first see if there
was an extension to use at the action level.  If not it would check the package level (including
package inheritance).  If still no specific extension, it would behave as it currently does.

2. When mapping an incoming URL to an action, the reverse will also hold.  If the action or
its package specify a specific extension, then the action can only be matched if the URL has
that extension.

So in the above example, the following urls would be expected to work:
1. /a1 (action level no extension)
2. /b1.html (action level "html" extension)
3. /c1.action (no action level extension, using package level "action" extension)

However, an url like "/b1.action" will not match any actions because "action" extension doesn't
match the action's "html" extension.

This change would be 100% backwards because if you don't specify any extension attributes
on the package or action, it falls back to the current behavior.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message