Author: jcompagner
Date: Tue Nov 14 07:23:21 2006
New Revision: 474818
URL: http://svn.apache.org/viewvc?view=rev&rev=474818
Log:
session pagemap access meta should be cleared for a pagemap that gets removed
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java?view=diff&rev=474818&r1=474817&r2=474818
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Session.java
Tue Nov 14 07:23:21 2006
@@ -21,11 +21,13 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import java.util.Map.Entry;
import org.apache.commons.logging.Log;
@@ -122,8 +124,35 @@
*/
public abstract class Session implements Serializable
{
+
private static final long serialVersionUID = 1L;
+ /** meta data key for missing body tags logging. */
+ public static final MetaDataKey PAGEMAP_ACCESS_MDK = new MetaDataKey(
+ PageMapAccessMetaData.class)
+ {
+ private static final long serialVersionUID = 1L;
+ };
+
+ /**
+ * meta data for recording map map access.
+ */
+ public static final class PageMapAccessMetaData implements Serializable
+ {
+ private static final long serialVersionUID = 1L;
+
+ Set pageMapNames = new HashSet(2);
+
+ /**
+ * @param pagemap the pagemap to add as used.
+ * @return the boolean if it was added (didn't already contain
the pagemap)
+ */
+ public boolean add(PageMap pagemap)
+ {
+ return pageMapNames.add(pagemap.getName());
+ }
+ }
+
/** Name of session attribute under which this session is stored */
public static final String SESSION_ATTRIBUTE_NAME = "session";
@@ -688,6 +717,8 @@
*/
public final void removePageMap(final PageMap pageMap)
{
+ PageMapAccessMetaData pagemapMetaData =
(PageMapAccessMetaData)getMetaData(PAGEMAP_ACCESS_MDK);
+ if(pagemapMetaData != null)
pagemapMetaData.pageMapNames.remove(pageMap.getName());
usedPageMaps.remove(pageMap);
removeAttribute(attributeForPageMapName(pageMap.getName()));
dirty();
Modified:
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java?view=diff&rev=474818&r1=474817&r2=474818
==============================================================================
---
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
(original)
+++
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/markup/html/WebPage.java
Tue Nov 14 07:23:21 2006
@@ -17,16 +17,11 @@
*/
package wicket.markup.html;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import wicket.Component;
import wicket.IRequestTarget;
-import wicket.MetaDataKey;
import wicket.Page;
import wicket.PageMap;
import wicket.PageParameters;
@@ -81,23 +76,6 @@
/** log. */
private static final Log log = LogFactory.getLog(WebPage.class);
- /** meta data key for missing body tags logging. */
- private static final MetaDataKey PAGEMAP_ACCESS_MDK = new MetaDataKey(
- PageMapAccessMetaData.class)
- {
- private static final long serialVersionUID = 1L;
- };
-
- /**
- * meta data for recording map map access.
- */
- private static final class PageMapAccessMetaData implements Serializable
- {
- private static final long serialVersionUID = 1L;
-
- Set pageMapNames = new HashSet(1);
- }
-
/** The resource references used for new window/tab support */
private static ResourceReference cookiesResource = new
ResourceReference(WebPage.class,
"cookies.js");
@@ -375,37 +353,15 @@
Session session = getSession();
- PageMapAccessMetaData meta =
(PageMapAccessMetaData)session
- .getMetaData(PAGEMAP_ACCESS_MDK);
+ Session.PageMapAccessMetaData meta =
(Session.PageMapAccessMetaData)session
+
.getMetaData(Session.PAGEMAP_ACCESS_MDK);
if (meta == null)
{
- meta = new PageMapAccessMetaData();
- session.setMetaData(PAGEMAP_ACCESS_MDK, meta);
- }
- boolean firstAccess = false;
- if (!meta.pageMapNames.contains(name))
- {
- firstAccess = true;
- meta.pageMapNames.add(name);
+ meta = new Session.PageMapAccessMetaData();
+ session.setMetaData(Session.PAGEMAP_ACCESS_MDK,
meta);
}
+ boolean firstAccess = meta.add(getPageMap());
- // Here is our trickery to detect whether the current
request was
- // made in a new window/ tab, in which case it should
go in a
- // different page map so that we don't intermangle the
history of
- // those windows
- CharSequence url = null;
- if (target instanceof IBookmarkablePageRequestTarget)
- {
- IBookmarkablePageRequestTarget current =
(IBookmarkablePageRequestTarget)target;
- BookmarkablePageRequestTarget redirect = new
BookmarkablePageRequestTarget(
-
getSession().createAutoPageMapName(), current.getPageClass(), current
-
.getPageParameters());
- url = cycle.urlFor(redirect);
- }
- else
- {
- url =
urlFor(INewBrowserWindowListener.INTERFACE);
- }
if (firstAccess)
{
// this is the first access to the pagemap, set
window.name
@@ -417,6 +373,23 @@
}
else
{
+ // Here is our trickery to detect whether the
current request was
+ // made in a new window/ tab, in which case it
should go in a
+ // different page map so that we don't
intermangle the history of
+ // those windows
+ CharSequence url = null;
+ if (target instanceof
IBookmarkablePageRequestTarget)
+ {
+ IBookmarkablePageRequestTarget current
= (IBookmarkablePageRequestTarget)target;
+ BookmarkablePageRequestTarget redirect
= new BookmarkablePageRequestTarget(
+
getSession().createAutoPageMapName(), current.getPageClass(), current
+ .getPageParameters());
+ url = cycle.urlFor(redirect);
+ }
+ else
+ {
+ url =
urlFor(INewBrowserWindowListener.INTERFACE);
+ }
JavascriptUtils.writeOpenTag(response);
response.write("if (window.name=='') {
window.location=\"");
response.write(url);