WICKET-4330
Non standard ("wicket") namespace causes incorrect relative URL in certain casesProject: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/32616886 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/32616886 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/32616886 Branch: refs/heads/wicket-1.5.x Commit: 3261688698c1c51808e574de7b3693da6e4991c3 Parents: 52c174a Author: martin-g <[email protected]> Authored: Wed Jan 11 14:10:30 2012 +0200 Committer: martin-g <[email protected]> Committed: Wed Jan 11 14:57:22 2012 +0200 ---------------------------------------------------------------------- .../org/apache/wicket/markup/MarkupParser.java | 2 +- .../parser/filter/RelativePathPrefixHandler.java | 40 ++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/32616886/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java index 191a5f6..429e0d1 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java @@ -169,7 +169,7 @@ public class MarkupParser extends AbstractMarkupParser } filters.add(new OpenCloseTagExpander()); - filters.add(new RelativePathPrefixHandler()); + filters.add(new RelativePathPrefixHandler(markupResourceStream)); filters.add(new EnclosureHandler()); filters.add(new InlineEnclosureHandler()); filters.add(new StyleAndScriptIdentifier(markup)); http://git-wip-us.apache.org/repos/asf/wicket/blob/32616886/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java index 2eca57c..ba7029f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java @@ -23,6 +23,8 @@ import org.apache.wicket.MarkupContainer; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupElement; +import org.apache.wicket.markup.MarkupParser; +import org.apache.wicket.markup.MarkupResourceStream; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.WicketTag; import org.apache.wicket.markup.html.TransparentWebMarkupContainer; @@ -95,6 +97,27 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter } }; + /** The markup created by reading the markup file */ + private final MarkupResourceStream markup; + + /** + * Constructor for the IComponentResolver role. + */ + public RelativePathPrefixHandler() + { + this(null); + } + + /** + * Constructor for the IMarkupFilter role + * @param markup + * The markup created by reading the markup file + */ + public RelativePathPrefixHandler(final MarkupResourceStream markup) + { + this.markup = markup; + } + @Override protected final MarkupElement onComponentTag(ComponentTag tag) throws ParseException { @@ -103,9 +126,11 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter return tag; } + String wicketIdAttr = getWicketNamespace() + ":" + "id"; + // Don't touch any wicket:id component and any auto-components if ((tag instanceof WicketTag) || (tag.isAutolinkEnabled() == true) || - (tag.getAttributes().get("wicket:id") != null)) + (tag.getAttributes().get(wicketIdAttr) != null)) { return tag; } @@ -147,4 +172,17 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter } return null; } + + private String getWicketNamespace() + { + String wicketNamespace; + if (markup != null) + { + wicketNamespace = markup.getWicketNamespace(); + } + else { + wicketNamespace = MarkupParser.WICKET; + } + return wicketNamespace; + } }
