You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/11/19 17:05:24 UTC
wicket git commit: WICKET-6028 Detach called on enclosure component
while it had a non-empty queue
Repository: wicket
Updated Branches:
refs/heads/master fee1ff669 -> 2342406bd
WICKET-6028 Detach called on enclosure component while it had a non-empty queue
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2342406b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2342406b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2342406b
Branch: refs/heads/master
Commit: 2342406bda57943d4c3deef951c90c2ae776191b
Parents: fee1ff6
Author: Andrea Del Bene <ad...@apache.org>
Authored: Thu Nov 19 14:12:47 2015 +0100
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Thu Nov 19 17:04:40 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/wicket/Application.java | 1 -
.../java/org/apache/wicket/MarkupContainer.java | 116 ++++++++++++-------
.../org/apache/wicket/markup/WicketTag.java | 4 +-
.../parser/filter/WicketTagIdentifier.java | 28 ++++-
4 files changed, 104 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2342406b/wicket-core/src/main/java/org/apache/wicket/Application.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java b/wicket-core/src/main/java/org/apache/wicket/Application.java
index db413a6..bc5734c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -813,7 +813,6 @@ public abstract class Application implements UnboundListener, IEventSink
PageSettings pageSettings = getPageSettings();
// Install default component resolvers
- pageSettings.addComponentResolver(new MarkupInheritanceResolver());
pageSettings.addComponentResolver(new HtmlHeaderResolver());
pageSettings.addComponentResolver(new WicketLinkTagHandler());
pageSettings.addComponentResolver(new WicketMessageResolver());
http://git-wip-us.apache.org/repos/asf/wicket/blob/2342406b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index 8d08b77..916b994 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -1471,59 +1471,97 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
else if (tag.getFlag(ComponentTag.RENDER_RAW))
{
// No component found, but "render as raw markup" flag found
- getResponse().write(element.toCharSequence());
+ if (canRenderRawTag(tag))
+ {
+ getResponse().write(element.toCharSequence());
+ }
return true;
}
else
{
- if (tag instanceof WicketTag)
- {
- if (((WicketTag)tag).isChildTag())
- {
- markupStream.throwMarkupException("Found " + tag.toString() +
- " but no <wicket:extend>. Container: " + toString());
- }
- else
- {
- markupStream.throwMarkupException("Failed to handle: " +
- tag.toString() +
- ". It might be that no resolver has been registered to handle this special tag. " +
- " But it also could be that you declared wicket:id=" + id +
- " in your markup, but that you either did not add the " +
- "component to your page at all, or that the hierarchy does not match. " +
- "Container: " + toString());
- }
- }
-
- List<String> names = findSimilarComponents(id);
-
- // No one was able to handle the component id
- StringBuilder msg = new StringBuilder(500);
- msg.append("Unable to find component with id '");
- msg.append(id);
- msg.append("' in ");
- msg.append(this.toString());
- msg.append("\n\tExpected: '");
- msg.append(getPageRelativePath());
- msg.append(PATH_SEPARATOR);
- msg.append(id);
- msg.append("'.\n\tFound with similar names: '");
- msg.append(Strings.join("', ", names));
- msg.append('\'');
-
- log.error(msg.toString());
- markupStream.throwMarkupException(msg.toString());
+ throwException(markupStream, tag);
}
}
else
{
// Render as raw markup
- getResponse().write(element.toCharSequence());
+ if (canRenderRawTag(element))
+ {
+ getResponse().write(element.toCharSequence());
+ }
return true;
}
return false;
}
+
+ /**
+ * Says if the given tag can be handled as a raw markup.
+ *
+ * @param tag
+ * the current tag.
+ * @return true if the tag can be handled as raw markup, false otherwise.
+ */
+ private boolean canRenderRawTag(MarkupElement tag)
+ {
+ boolean isWicketTag = tag instanceof WicketTag;
+
+ boolean stripTag = isWicketTag ? Application.get().getMarkupSettings().getStripWicketTags() : false;
+
+ return !stripTag;
+ }
+
+ /**
+ * Throws a {@code org.apache.wicket.markup.MarkupException} when the
+ * component markup is not consistent.
+ *
+ * @param markupStream
+ * the source stream for the component markup.
+ * @param tag
+ * the tag that can not be handled.
+ */
+ private void throwException(final MarkupStream markupStream, final ComponentTag tag)
+ {
+ final String id = tag.getId();
+
+ if (tag instanceof WicketTag)
+ {
+ if (((WicketTag)tag).isChildTag())
+ {
+ markupStream.throwMarkupException("Found " + tag.toString() +
+ " but no <wicket:extend>. Container: " + toString());
+ }
+ else
+ {
+ markupStream.throwMarkupException("Failed to handle: " +
+ tag.toString() +
+ ". It might be that no resolver has been registered to handle this special tag. " +
+ " But it also could be that you declared wicket:id=" + id +
+ " in your markup, but that you either did not add the " +
+ "component to your page at all, or that the hierarchy does not match. " +
+ "Container: " + toString());
+ }
+ }
+
+ List<String> names = findSimilarComponents(id);
+
+ // No one was able to handle the component id
+ StringBuilder msg = new StringBuilder(500);
+ msg.append("Unable to find component with id '");
+ msg.append(id);
+ msg.append("' in ");
+ msg.append(this.toString());
+ msg.append("\n\tExpected: '");
+ msg.append(getPageRelativePath());
+ msg.append(PATH_SEPARATOR);
+ msg.append(id);
+ msg.append("'.\n\tFound with similar names: '");
+ msg.append(Strings.join("', ", names));
+ msg.append('\'');
+
+ log.error(msg.toString());
+ markupStream.throwMarkupException(msg.toString());
+ }
private List<String> findSimilarComponents(final String id)
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/2342406b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
index 67f96f2..8cb9cf1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java
@@ -205,8 +205,8 @@ public class WicketTag extends ComponentTag
else
{
final WicketTag tag = new WicketTag(xmlTag.mutable());
- tag.setId(getId());
- tag.setAutoComponentTag(isAutoComponentTag());
+ copyPropertiesTo(tag);
+
return tag;
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2342406b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
index c39faea..4834973 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java
@@ -53,6 +53,8 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
{
/** List of well known wicket tag names */
private static final Set<String> WELL_KNOWN_TAG_NAMES = new HashSet<>();
+ /** List of raw wicket tag names */
+ private static final Set<String> RAW_TAG_NAMES = new HashSet<>();
static {
WELL_KNOWN_TAG_NAMES.add(Border.BORDER);
@@ -70,6 +72,11 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
WELL_KNOWN_TAG_NAMES.add(WicketContainerResolver.CONTAINER);
WELL_KNOWN_TAG_NAMES.add(WicketMessageResolver.MESSAGE);
}
+
+ static {
+ RAW_TAG_NAMES.add(MarkupInheritanceResolver.CHILD);
+ RAW_TAG_NAMES.add(MarkupInheritanceResolver.EXTEND);
+ }
/**
* Construct.
@@ -109,14 +116,18 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
if (Strings.isEmpty(wicketIdValue))
{
- // Make it a Wicket component. Otherwise it would be RawMarkup
+ // Make it a Wicket component.
tag.setId(namespace + "_" + tag.getName() + getRequestUniqueId());
tag.setModified(true);
- if (tag.isClose() == false)
+ if (isRaw(tag))
{
- tag.setAutoComponentTag(true);
+ tag.setFlag(ComponentTag.RENDER_RAW, true);
}
+ else if (tag.isClose() == false)
+ {
+ tag.setAutoComponentTag(true);
+ }
}
// If the tag is not a well-known wicket namespace tag
@@ -165,4 +176,15 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter
String lowerCaseTagName = tag.getName().toLowerCase(Locale.ENGLISH);
return WELL_KNOWN_TAG_NAMES.contains(lowerCaseTagName);
}
+
+ /**
+ *
+ * @param tag
+ * @return true, if tag must be raw
+ */
+ private boolean isRaw(final ComponentTag tag)
+ {
+ String lowerCaseTagName = tag.getName().toLowerCase(Locale.ENGLISH);
+ return RAW_TAG_NAMES.contains(lowerCaseTagName);
+ }
}