I got bitten once too many times by unexpected behaviour using wildcard
action paths so I dug out my debugger and figured out what was going on.
Attached is some extra documentation to save others from confusion.
Note, I added a debug log in ActionConfigMatcher (it would have helped me
figure out what was going on a lot sooner) but it's probably redundant
with
the added documentation. Your call, committers ;-)
The patch is against CVS HEAD.
L.
-------------- 8< -------------- 8< -------------- 8< --------------
Index: src/share/org/apache/struts/config/ActionConfigMatcher.java
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/config/ActionConfigMatcher.java,v
retrieving revision 1.11
diff -u -w -B -r1.11 ActionConfigMatcher.java
--- src/share/org/apache/struts/config/ActionConfigMatcher.java 1 Apr
2004 17:56:47 -0000 1.11
+++ src/share/org/apache/struts/config/ActionConfigMatcher.java 19 Jul
2005 20:59:24 -0000
@@ -38,7 +38,9 @@
/**
* Matches paths against pre-compiled wildcard expressions pulled from
* action configs. It uses the wildcard matcher from the Apache
- * Cocoon project.
+ * Cocoon project. Patterns will be matched in the order they exist
+ * in the Struts config file. The last match wins, so more specific
+ * patterns should be defined after less specific patterns.
*
* @since Struts 1.2
*/
@@ -110,6 +112,10 @@
for (Iterator i = compiledPaths.iterator(); i.hasNext();) {
m = (Mapping) i.next();
if (wildcard.match(vars, path, m.getPattern())) {
+ if (log.isDebugEnabled()) {
+ log.debug("Path matches pattern '"
+ + m.getActionConfig().getPath() + "'");
+ }
config = convertActionConfig(
path,
(ActionConfig) m.getActionConfig(),
Index: xdocs/userGuide/building_controller.xml
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/xdocs/userGuide/building_controller.xml,v
retrieving revision 1.2
diff -u -w -B -r1.2 building_controller.xml
--- xdocs/userGuide/building_controller.xml 27 Apr 2004 22:34:01
-0000 1.2
+++ xdocs/userGuide/building_controller.xml 19 Jul 2005 20:59:31
-0000
@@ -1405,6 +1405,15 @@
</p>
<p>
+ Mappings are matched against the request in the order they appear in
+ the Struts configuration file. If more than one pattern matches the
+ last one wins, so less specific patterns must appear before more
+ specific ones. However, if the request URL can be matched against
+ a path without any wildcards in it, no wildcard matching is
performed
+ and order in not important.
+ </p>
+
+ <p>
Wildcard patterns can contain one or more of the following
special tokens:
</p>
-------------- 8< -------------- 8< -------------- 8< --------------