Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   /*
    * Licensed to the Apache Software Foundation (ASF) under one or more
    * contributor license agreements.  See the NOTICE file distributed with
    * this work for additional information regarding copyright ownership.
    * The ASF licenses this file to You under the Apache License, Version 2.0
    * (the "License"); you may not use this file except in compliance with
    * the License.  You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.wicket;
  
  import java.util.HashSet;
  import java.util.List;
  import java.util.Set;
  
  import org.slf4j.Logger;
Abstract base class for pages. As a MarkupContainer subclass, a Page can contain a component hierarchy and markup in some markup language such as HTML. Users of the framework should not attempt to subclass Page directly. Instead they should subclass a subclass of Page that is appropriate to the markup type they are using, such as WebPage (for HTML markup).
  • Construction - When a page is constructed, it is automatically added to the current PageMap in the Session. When a Page is added to the Session's PageMap, the PageMap assigns the Page an id. A PageMap is roughly equivalent to a browser window and encapsulates a set of pages accessible through that window. When a popup window is created, a new PageMap is created for the popup.
  • Identity - The Session that a Page is contained in can be retrieved by calling Page.getSession(). Page identifiers start at 0 for each PageMap in the Session and increment as new pages are added to the map. The PageMap-(and Session)-unique identifier assigned to a given Page can be retrieved by calling getId(). So, the first Page added to a new user Session will always be named "0".
  • LifeCycle - Subclasses of Page which are interested in lifecycle events can override onBeginRequest, onEndRequest() and onModelChanged(). The onBeginRequest() method is inherited from Component. A call to onBeginRequest() is made for every Component on a Page before page rendering begins. At the end of a request (when rendering has completed) to a Page, the onEndRequest() method is called for every Component on the Page.
  • Nested Component Hierarchy - The Page class is a subclass of MarkupContainer. All MarkupContainers can have "associated markup", which resides alongside the Java code by default. All MarkupContainers are also Component containers. Through nesting, of containers, a Page can contain any arbitrary tree of Components. For more details on MarkupContainers, see MarkupContainer.
  • Bookmarkable Pages - Pages can be constructed with any constructor when they are being used in a Wicket session, but if you wish to link to a Page using a URL that is "bookmarkable" (which implies that the URL will not have any session information encoded in it, and that you can call this page directly without having a session first directly from your browser), you need to implement your Page with a no-arg constructor or with a constructor that accepts a PageParameters argument (which wraps any query string parameters for a request). In case the page has both constructors, the constructor with PageParameters will be used.
  • Models - Pages, like other Components, can have models (see org.apache.wicket.model.IModel). A Page can be assigned a model by passing one to the Page's constructor, by overriding initModel() or with an explicit invocation of setModel(). If the model is a org.apache.wicket.model.CompoundPropertyModel, Components on the Page can use the Page's model implicitly via container inheritance. If a Component is not assigned a model, the initModel() override in Component will cause that Component to use the nearest CompoundModel in the parent chain, in this case, the Page's model. For basic CompoundModels, the name of the Component determines which property of the implicit page model the component is bound to. If more control is desired over the binding of Components to the page model (for example, if you want to specify some property expression other than the component's name for retrieving the model object), BoundCompoundPropertyModel can be used.
  • Back Button - Pages can support the back button by enabling versioning with a call to setVersioned(boolean). If a Page is versioned and changes occur to it which need to be tracked, a version manager will be installed using the org.apache.wicket.session.ISessionStore's factory method newVersionManager().
  • Security - See org.apache.wicket.authorization.IAuthorizationStrategy, org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy

 
 public abstract class Page extends MarkupContainer implements IRedirectListenerIPageMapEntry
 {
You can set implementation of the interface in the Page.serializer then that implementation will handle the serialization of this page. The serializePage method is called from the writeObject method then the implementation override the default serialization.

Author(s):
jcompagner
 
 	public static interface IPageSerializer
 	{
Called when page is being deserialized

Parameters:
id TODO
name TODO
page
stream
Throws:
java.io.IOException
java.lang.ClassNotFoundException
 
 		public void deserializePage(int idString namePage pageObjectInputStream stream)
Called from the Component.writeObject(java.io.ObjectOutputStream) method.

Parameters:
page The page that must be serialized.
stream ObjectOutputStream
Throws:
java.io.IOException
 
 
 		public void serializePage(Page pageObjectOutputStream streamthrows IOException;

Returns object to be serialized instead of given page (called from writeReplace).

Parameters:
serializedPage
Returns:
object to be serialized instead of page (or the page instance itself)
 
 		public Object getPageReplacementObject(Page serializedPage);
 	}

When passed to getVersion(int) the latest page version is returned.
 
 	public static final int LATEST_VERSION = -1;

This is a thread local that is used for serializing page references in this page.It stores a Page.IPageSerializer which can be set by the outside world to do the serialization of this page.
 
 	public static final ThreadLocal serializer = new ThreadLocal();

True if a new version was created for this request.
 
 	private static final short FLAG_NEW_VERSION = ;

True if the page should try to be stateless
 
 	private static final int FLAG_STATELESS_HINT = ;

True if component changes are being tracked.
 
 	private static final short FLAG_TRACK_CHANGES = ;

Log.
 
 	private static final Logger log = LoggerFactory.getLogger(Page.class);

isBookmarkable() is expensive, we cache the result here
 
 
 	private static final long serialVersionUID = 1L;

Used to create page-unique numbers
 
 	private short autoIndex;

Numeric version of this page's id
 
 	private int numericId;

The PageMap within the session that this page is stored in
 
 	private transient IPageMap pageMap;

Name of PageMap that this page is stored in
 
 	private String pageMapName;

Set of components that rendered if component use checking is enabled
 
 	private transient Set renderedComponents;

Boolean if the page is stateless, so it doesn't have to be in the page map, will be set in urlFor
 
 	private transient Boolean stateless = null;

Version manager for this page
 
The page parameters object hat constructed this page
 
Constructor.
 
 	protected Page()
 	{
 		// A Page's id is not determined until setId is called when the Page is
 		// added to a PageMap in the Session.
 		super(null);
 		init();
 	}

Constructor.

Parameters:
model See Component
See also:
Component.Component.(java.lang.String,org.apache.wicket.model.IModel)
 
 	protected Page(final IModel model)
 	{
 		// A Page's id is not determined until setId is called when the Page is
 		// added to a PageMap in the Session.
 		super(nullmodel);
 		init();
 	}

Constructor.

Parameters:
pageMap The page map to put this page in
 
 	protected Page(final IPageMap pageMap)
 	{
 		// A Page's id is not determined until setId is called when the Page is
 		// added to a PageMap in the Session.
 		super(null);
 		init(pageMap);
 	}

Constructor.

Parameters:
pageMap the page map to put this page in
model See Component
See also:
Component.Component.(java.lang.String,org.apache.wicket.model.IModel)
 
 	protected Page(final IPageMap pageMapfinal IModel model)
 	{
 		// A Page's id is not determined until setId is called when the Page is
 		// added to a PageMap in the Session.
 		super(nullmodel);
 		init(pageMap);
 	}

The PageParameters parameter will be stored in this page and then those parameters will be used to create stateless links to this bookmarkable page.

Parameters:
parameters externally passed parameters
See also:
PageParameters
 
 	protected Page(final PageParameters parameters)
 	{
 		super(null);
 		this. = parameters;
 		init();
 	}

The PageParameters parameter will be stored in this page and then those parameters will be used to create stateless links to this bookmarkable page.

Parameters:
pageMap the page map to put this page in
parameters externally passed parameters
See also:
PageParameters
 
 	protected Page(final IPageMap pageMapfinal PageParameters parameters)
 	{
 		super(null);
 		this. = parameters;
 		init(pageMap);
 	}

The PageParameters object that was used to construct this page. This will be used in creating stateless/bookmarkable links to this page

Returns:
PageParameters The construction page parameter
 
 	{
 		return ;
 	}

Called right after a component's listener method (the provided method argument) was called. This method may be used to clean up dependencies, do logging, etc. NOTE: this method will also be called when beforeCallComponent(org.apache.wicket.Component,org.apache.wicket.RequestListenerInterface) or the method invocation itself failed.

Parameters:
component the component that is to be called
listener the listener of that component that is to be called
 
 	// TODO Post-1.3: We should create a listener on Application like
 	// IComponentInstantiationListener
 	// that forwards to IAuthorizationStrategy for RequestListenerInterface
 	// invocations.
 	public void afterCallComponent(final Component component,
 		final RequestListenerInterface listener)
 	{
 	}

Called just before a component's listener method (the provided method argument) is called. This method may be used to set up dependencies, enforce authorization, etc. NOTE: if this method fails, the method will not be executed. Method afterCallComponent(org.apache.wicket.Component,org.apache.wicket.RequestListenerInterface) will always be called.

Parameters:
component the component that is to be called
listener the listener of that component that is to be called
 
 	// TODO Post-1.3: We should create a listener on Application like
 	// IComponentInstantiationListener
 	// that forwards to IAuthorizationStrategy for RequestListenerInterface
 	// invocations.
 	public void beforeCallComponent(final Component component,
 		final RequestListenerInterface listener)
 	{
 	}

Adds a component to the set of rendered components.

Parameters:
component The component that was rendered
 
 	public final void componentRendered(final Component component)
 	{
 		// Inform the page that this component rendered
 		if (Application.get().getDebugSettings().getComponentUseCheck())
 		{
 			if ( == null)
 			{
 			}
 			if (.add(component) == false)
 			{
 				throw new MarkupException("The component " + component +
 					" has the same wicket:id as another component already added at the same level");
 			}
 			{
 				.debug("Rendered " + component);
 			}
 		}
 	}

Detaches any attached models referenced by this page.
 
 	public void detachModels()
 	{
 		// // visit all this page's children to detach the models
 		// visitChildren(new IVisitor()
 		// {
 		// public Object component(Component component)
 		// {
 		// try
 		// {
 		// // detach any models of the component
 		// component.detachModels();
 		// }
 		// catch (Exception e) // catch anything; we MUST detach all models
 		// {
 		// log.error("detaching models of component " + component + " failed:",
 		// e);
 		// }
 		// return IVisitor.CONTINUE_TRAVERSAL;
 		// }
 		// });
 
 		super.detachModels();
 	}


Mark this page as dirty in the session
 
 	public final void dirty()
 	{
 		Session.get().dirtyPage(this);
 	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL. This method is called when a component was rendered standalone. If it is a MarkupContainer then the rendering for that container is checked.

Parameters:
component
 
 	public final void endComponentRender(Component component)
 	{
 		if (component instanceof MarkupContainer)
 		{
 		}
 		else
 		{
 		}
 	}

Expire the oldest version of this page
 
 	public final void expireOldestVersion()
 	{
 		if ( != null)
 		{
 		}
 	}

Returns:
The current ajax version number of this page.
 
 	public final int getAjaxVersionNumber()
 	{
 		return  == null ? 0 : .getAjaxVersionNumber();
 	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT. Get a page unique number, which will be increased with each call.

Returns:
A page unique number
 
 	public final short getAutoIndex()
 	{
 		return ++;
 	}

Returns:
The current version number of this page. If the page has been changed once, the return value will be 1. If the page has not yet been revised, the version returned will be 0, indicating that the page is still in its original state.
 
 	public final int getCurrentVersionNumber()
 	{
 		return  == null ? 0 : .getCurrentVersionNumber();
 	}

 
 	public final String getId()
 	{
 		return Integer.toString();
 	}

 
 	public int getNumericId()
 	{
 		return ;
 	}

 
 	public final Class getPageClass()
 	{
 		return getClass();
 	}

Returns:
Returns the PageMap that this Page is stored in.
 
 	public final IPageMap getPageMap()
 	{
 		// If the transient needs to be restored
 		if ( == null)
 		{
 			// Look the page map up in the session
 			 = PageMap.forName();
 		}
 		return ;
 	}

Returns:
Get a page map entry for this page. By default, this is the page itself. But if you know of some way to compress the state for the page, you can return a custom implementation that produces the page on-the-fly.
 
 	{
 		return this;
 	}

Returns:
String The PageMap name
 
 	public final String getPageMapName()
 	{
 		return ;
 	}

Returns:
Size of this page in bytes
 
 	public final long getSizeInBytes()
 	{
 		 = null;
 		return Objects.sizeof(this);
 	}

Returns whether the page should try to be stateless. To be stateless, getStatelessHint() of every component on page (and it's behavior) must return true and the page must be bookmarkable.

 
 	public final boolean getStatelessHint()
 	{
 	}

Override this method to implement a custom way of producing a version of a Page when it cannot be found in the Session.

Parameters:
versionNumber The version desired
Returns:
A Page object with the component/model hierarchy that was attached to this page at the time represented by the requested version.
 
 	public Page getVersion(final int versionNumber)
 	{
 		// If we're still the original Page and that's what's desired
 		if ( == null)
 		{
 			if (versionNumber == 0 || versionNumber == )
 			{
 				return this;
 			}
 			else
 			{
 				.info("No version manager available to retrieve requested versionNumber " +
 					versionNumber);
 				return null;
 			}
 		}
 		else
 		{
 			// Save original change tracking state
 			final boolean originalTrackChanges = getFlag();
 
 			try
 			{
 				// While the version manager is potentially playing around with
 				// the Page, it may change the page in order to undo changes and
 				// we don't want change tracking going on while its doing this.
 
 				// Get page of desired version
 				final Page page;
 				if (versionNumber != )
 				{
 					page = .getVersion(versionNumber);
 				}
 				else
 				{
 				}
 
 				// If we went all the way back to the original page
 				if (page != null && page.getCurrentVersionNumber() == 0 &&
 					page.getAjaxVersionNumber() == 0)
 				{
 					// remove version info
 					page.versionManager = null;
 				}
 
 				return page;
 			}
 			finally
 			{
 				// Restore change tracking state
 				setFlag(originalTrackChanges);
 			}
 		}
 	}

Returns:
Number of versions of this page
 
 	public final int getVersions()
 	{
 		return  == null ? 1 : .getVersions() + 1;
 	}

Returns:
This page's component hierarchy as a string
 
 	public final String hierarchyAsString()
 	{
 		final StringBuffer buffer = new StringBuffer();
 		buffer.append("Page " + getId() + " (version " + getCurrentVersionNumber() + ")");
 		{
 			public Object component(Component component)
 			{
 				int levels = 0;
 				for (Component current = componentcurrent != nullcurrent = current.getParent())
 				{
 					levels++;
 				}
 				buffer.append(StringValue.repeat(levels"	") + component.getPageRelativePath() +
 					":" + Classes.simpleName(component.getClass()));
 				return null;
 			}
 		});
 		return buffer.toString();
 	}

Call this method when the current (ajax) request shouldn't merge the changes that are happening to the page with the previous version. This is for example needed when you want to redirect to this page in an ajax request and then you do want to version normally.. This method doesn't do anything if the getRequest().mergeVersion doesn't return true.
 
 	public final void ignoreVersionMerge()
 	{
 		{
 			mayTrackChangesFor(thisnull);
 			if ( != null)
 			{
 			}
 		}
 	}

Bookmarkable page can be instantiated using a bookmarkable URL.

Returns:
Returns true if the page is bookmarkable.
 
 	public boolean isBookmarkable()
 	{
 		if (bookmarkable == null)
 		{
 			try
 			{
 
 				if (getClass().getConstructor(new Class[] {}) != null)
 				{
 					bookmarkable = .;
 				}
 
 			}
 			catch (Exception ignore)
 			{
 				try
 				{
 					if (getClass().getConstructor(new Class[] { PageParameters.class }) != null)
 					{
 						bookmarkable = .;
 					}
 				}
 				catch (Exception ignore2)
 				{
 				}
 			}
 			if (bookmarkable == null)
 			{
 				bookmarkable = .;
 			}
 		}
 		return bookmarkable.booleanValue();
 
 	}

Override this method and return true if your page is used to display Wicket errors. This can help the framework prevent infinite failure loops.

Returns:
True if this page is intended to display an error to the end user.
 
 	public boolean isErrorPage()
 	{
 		return false;
 	}

Gets whether the page is stateless. Components on stateless page must not render any statefull urls, and components on statefull page must not render any stateless urls. Statefull urls are urls, which refer to a certain (current) page instance.

Returns:
Whether this page is stateless
 
 	public final boolean isPageStateless()
 	{
 		if (isBookmarkable() == false)
 		{
 			{
 				.warn("Page '" + this + "' is not stateless because it is not bookmarkable, " +
 					"but the stateless hint is set to true!");
 			}
 		}
 
 		if (getStatelessHint() == false)
 		{
 			return false;
 		}
 
 		if ( == null)
 		{
 			if (isStateless() == false)
 			{
 			}
 		}
 
 		if ( == null)
 		{
 			final Object[] returnArray = new Object[1];
 			Object returnValue = visitChildren(Component.classnew IVisitor()
 			{
 				public Object component(Component component)
 				{
 					if (!component.isStateless())
 					{
 						returnArray[0] = component;
 						return .;
 					}
 
 				}
 			});
 			if (returnValue == null)
 			{
 			}
 			else if (returnValue instanceof Boolean)
 			{
 				 = (Boolean)returnValue;
 			}
 
 			// TODO (matej_k): The stateless hint semantics has been changed, this warning doesn't
 			// work anymore. but we don't really have
 			// alternative to this
 			/*
 			 * if (!stateless.booleanValue() && getStatelessHint()) { log.warn("Page '" + this + "'
 			 * is not stateless because of '" + returnArray[0] + "' but the stateless hint is set to
 			 * true!"); }
 			 */
 		}
 
 	}

Redirect to this page.

 
 	public final void onRedirect()
 	{
 	}

Convenience method. Search for children of type fromClass and invoke their respective removePersistedFormData() methods.

Parameters:
formClass Form to be selected. Pages may have more than one Form.
disablePersistence if true, disable persistence for all FormComponents on that page. If false, it will remain unchanged.
See also:
org.apache.wicket.markup.html.form.Form.removePersistentFormComponentValues(boolean)
 
 	public final void removePersistedFormData(final Class formClass,
 		final boolean disablePersistence)
 	{
 		// Check that formClass is an instanceof Form
 		if (!Form.class.isAssignableFrom(formClass))
 		{
 			throw new WicketRuntimeException("Form class " + formClass.getName() +
 				" is not a subclass of Form");
 		}
 
 		// Visit all children which are an instance of formClass
 		visitChildren(formClassnew IVisitor()
 		{
 			public Object component(final Component component)
 			{
 				// They must be of type Form as well
 				if (component instanceof Form)
 				{
 					// Delete persistent FormComponent data and disable
 					// persistence
 					((Form)component).removePersistentFormComponentValues(disablePersistence);
 				}
 			}
 		});
 	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
 
 	public final void renderPage()
 	{
 		// first try to check if the page can be rendered:
 		{
 			{
 				.debug("Page not allowed to render: " + this);
 			}
 		}
 
 		// Make sure it is really empty
 
 		// if the page is stateless, reset the flag so that it is tested again
 		{
 			 = null;
 		}
 
 		// Set form component values from cookies
 
 		try
 		{
 		}
 		catch (RuntimeException e)
 		{
 			// if an exception is thrown then we have to call after render
 			// else the components could be in a wrong state (rendering)
 			try
 			{
 			}
 			catch (RuntimeException e2)
 			{
 				// ignore this one could be a result off.
 			}
 			throw e;
 		}
 
 
 		// Handle request by rendering page
 		try
 		{
 			render(null);
 		}
 		finally
 		{
 		}
 
 		// Check rendering if it happened fully
 
 		// clean up debug meta data if component check is on
 		if (Application.get().getDebugSettings().getComponentUseCheck())
 		{
 			{
 				public Object component(Component component)
 				{
 					component.setMetaData(.null);
 				}
 			});
 		}
 
 		if (!isPageStateless())
 		{
 			// trigger creation of the actual session in case it was deferred
 			Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(), true);
 			// Add/touch the response page in the session (its pagemap).
 			getSession().touch(this);
 		}
 	}

This returns a page instance that is rollbacked the number of versions that is specified compared to the current page. This is a rollback including ajax versions.

Parameters:
numberOfVersions to rollback
Returns:
rollbacked page instance
 
 	public final Page rollbackPage(int numberOfVersions)
 	{
 		Page page =  == null ? this : .rollbackPage(numberOfVersions);
 		getSession().touch(page);
 		return page;
 	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL. Set the id for this Page. This method is called by PageMap when a Page is added because the id, which is assigned by PageMap, is not known until this time.

Parameters:
id The id
 
 	public final void setNumericId(final int id)
 	{
 		 = id;
 	}

Sets whether the page should try to be stateless. To be stateless, getStatelessHint() of every component on page (and it's behavior) must return true and the page must be bookmarkable.

Parameters:
value whether the page should try to be stateless
 
 	public final void setStatelessHint(boolean value)
 	{
 		if (value && !isBookmarkable())
 		{
 				"Can't set stateless hint to true on a page when the page is not bookmarkable, page: " +
 					this);
 		}
 	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL. This method is called when a component will be rendered standalone.

Parameters:
component
	public final void startComponentRender(Component component)
	}

Get the string representation of this container.

Returns:
String representation of this container
	public String toString()
		if ( != null)
			return "[Page class = " + getClass().getName() + ", id = " + getId() + ", version = " +
		else
			return "[Page class = " + getClass().getName() + ", id = " + getId() + ", version = " +
				0 + "]";
	}

Throw an exception if not all components rendered.

Parameters:
renderedContainer The page itself if it was a full page render or the container that was rendered standalone
	private final void checkRendering(final MarkupContainer renderedContainer)
		// If the application wants component uses checked and
		// the response is not a redirect
		final IDebugSettings debugSettings = Application.get().getDebugSettings();
		if (debugSettings.getComponentUseCheck() && !getResponse().isRedirect())
			final List unrenderedComponents = new ArrayList();
			final StringBuffer buffer = new StringBuffer();
			renderedContainer.visitChildren(new IVisitor()
				public Object component(final Component component)
					// If component never rendered
					if ( == null || !.contains(component))
						// If auto component ...
						if (!component.isAuto() && component.isVisibleInHierarchy())
							// Increase number of unrendered components
							unrenderedComponents.add(component);
							// Add to explanatory string to buffer
							buffer.append(Integer.toString(unrenderedComponents.size()) + ". " +
								component + "\n");
							if (metadata != null)
								buffer.append(metadata);
							metadata = (String)component.getMetaData(.);
							if (metadata != null)
								buffer.append(metadata);
						else
							// if the component is not visible in hierarchy we
							// should not visit its children since they are also
							// not visible
			});
			// Throw exception if any errors were found
			if (unrenderedComponents.size() > 0)
				// Get rid of set
				Iterator iterator = unrenderedComponents.iterator();
				while (iterator.hasNext())
					Component component = (Component)iterator.next();
					// Now first test if the component has a sibling that is a transparent resolver.
					Iterator iterator2 = component.getParent().iterator();
					while (iterator2.hasNext())
						Component sibling = (Component)iterator2.next();
						if (!sibling.isVisible())
							boolean isTransparentMarkupContainer = sibling instanceof MarkupContainer &&
							boolean isComponentResolver = sibling instanceof IComponentResolver;
							if (isTransparentMarkupContainer || isComponentResolver)
								// we found a transparent container that isn't visible
								// then ignore this component and only do a debug statement here.
									"Component {} wasn't rendered but most likely it has a transparent parent: {}",
									componentsibling);
								iterator.remove();
								break;
					// Check if this component is a child of a border whose body is invisible and if
					// so ignore it
					Border border = (Border)component.findParent(Border.class);
					if (border != null && !border.getBodyContainer().isVisibleInHierarchy())
						// Suppose:
						//						  
						// <div wicket:id="border"><div wicket:id="label"></div> suppose
						// border->label and border's body is hidden.
						//						  
						// The label is added to border not to its hidden body so as far as wicket
						// is concerned label is visible in hierarchy, but when rendering label wont
						// be rendered because in the markup it is inside the border's hidden body.
						// Thus component use check will fail even though it shouldnt - make sure it
						// doesnt.
						//						 
						// TODO it would be more accurate to determine that this component is inside
						// the border parent's markup not the border's itself
						iterator.remove();
				// if still > 0
				if (unrenderedComponents.size() > 0)
					// Throw exception
						"The component(s) below failed to render. A common problem is that you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered).\n\n" +
							buffer.toString());
		// Get rid of set
	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.
	private final void endVersion()
		// Any changes to the page after this point will be tracked by the
		// page's version manager. Since trackChanges is never set to false,
		// this effectively means that change tracking begins after the
		// first request to a page completes.
		// If a new version was created
			// Reset boolean for next request
			// We're done with this version
			if ( != null)
			// Evict any page version(s) as need be
	}

Initializes Page by adding it to the Session and initializing it.
	private final void init()
		final RequestCycle cycle = getRequestCycle();
		String pageMapName = null;
		if (cycle != null)
			pageMapName = parameters.getPageMapName();
		final IPageMap pageMap = PageMap.forName(pageMapName);
		init(pageMap);
	}

Initializes Page by adding it to the Session and initializing it.

Parameters:
pageMap The page map to put this page in.
	private final void init(final IPageMap pageMap)
		// Set the page map
		if (pageMap != null)
			setPageMap(pageMap);
		else
			throw new IllegalStateException("PageMap cannot be null");
		// Set versioning of page based on default
		// All Pages are born dirty so they get clustered right away
	private void setNextAvailableId()
		else
			// Set the numeric id on this page
	}

For the given component, whether we may record changes.

Parameters:
component The component which is affected
parent
Returns:
True if the change is okay to report
	private final boolean mayTrackChangesFor(final Component componentMarkupContainer parent)
		// first call the method so that people can track dirty components
		componentChanged(componentparent);
		// Auto components do not participate in versioning since they are
		// added during the rendering phase (which is normally illegal).
		if (component.isAuto() || (parent == null && !component.isVersioned()) ||
			(parent != null && !parent.isVersioned()))
			return false;
		else
			// the component is versioned... are we tracking changes at all?
				// we are tracking changes... do we need to start new version?
					// if we have no version manager
					if ( == null)
						// then install a new version manager
					// start a new version
				// return true as we are ready for versioning
				return true;
			// we are not tracking changes or the component not versioned
			return false;
	}

This method will be called for all components that are changed on the page So also auto components or components that are not versioned. If the parent is given that it was a remove or add from that parent of the given component. else it was just a internal property change of that component.

Parameters:
component
parent
	protected void componentChanged(Component componentMarkupContainer parent)
		int id = s.readShort();
		String name = (String)s.readObject();
		if (ps != null)
			ps.deserializePage(idnamethiss);
		else
		if (ps != null)
			return ps.getPageReplacementObject(this);
		else
			return this;
		if (ps != null)
			ps.serializePage(thiss);
		else
	}


Set-up response with appropriate content type, locale and encoding. The locale is set equal to the session's locale. The content type header contains information about the markup type (@see #getMarkupType()) and the encoding. The response (and request) encoding is determined by an application setting (@see ApplicationSettings#getResponseRequestEncoding()). In addition, if the page's markup contains a xml declaration like &lt?xml ... ?> an xml declaration with proper encoding information is written to the output as well, provided it is not disabled by an application setting (@see ApplicationSettings#getStripXmlDeclarationFromOutput()).

Note: Prior to Wicket 1.1 the output encoding was determined by the page's markup encoding. Because this caused uncertainties about the /request/ encoding, it has been changed in favor of the new, much safer, approach. Please see the Wiki for more details.

	protected void configureResponse()
		// Get the response and application
		final RequestCycle cycle = getRequestCycle();
		final Application application = cycle.getApplication();
		final Response response = cycle.getResponse();
		// Determine encoding
		final String encoding = application.getRequestCycleSettings().getResponseRequestEncoding();
		// Set content type based on markup type for page
		response.setContentType("text/" + getMarkupType() + "; charset=" + encoding);
		// Write out an xml declaration if the markup stream and settings allow
		final MarkupStream markupStream = findMarkupStream();
		if ((markupStream != null) && (markupStream.getXmlDeclaration() != null) &&
			// Gwyn - Wed, 21 May 2008 12:23:41
			// If the xml declaration in the markup used double-quotes, use them in the output too
			// Whether it should be or not, sometimes it's significant...
			final String quoteChar = (markupStream.getXmlDeclaration().indexOf('\"') == -1) ? "'"
"\"";
			response.write("<?xml version=");
			response.write(quoteChar);
			response.write("1.0");
			response.write(quoteChar);
			response.write(" encoding=");
			response.write(quoteChar);
			response.write(encoding);
			response.write(quoteChar);
			response.write("?>");
		// Set response locale from session locale
	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.

	protected final void internalOnModelChanged()
			public Object component(final Component component)
				// If form component is using form model
				if (component.sameInnermostModel(Page.this))
					component.modelChanged();
		});
	}

THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.

Parameters:
map
	protected final void moveToPageMap(IPageMap map)
		// TODO post 1.2 shouldn't we remove this page from the pagemap/session
		// if it would be in there?
		// This should be done if the page was not cloned first, but shouldn't
		// be done if it was cloned..
	}

Deprecated:
TODO Remove in 1.4
Returns:
Factory method that creates a version manager for this Page
		return null;
	protected void onBeforeRender()
		// If any of the components on page is not stateless, we need to bind the session
		// before we start rendering components, as then jsessionid won't be appended
		// for links rendered before first stateful component
	}

	protected void onDetach()
			.debug("ending request for page " + this + ", request " + getRequest());
		super.onDetach();
	}


Renders this container to the given response object.

Parameters:
markupStream
	protected void onRender(final MarkupStream markupStream)
		// Set page's associated markup stream
		final MarkupStream associatedMarkupStream = getAssociatedMarkupStream(true);
		setMarkupStream(associatedMarkupStream);
		// Configure response object with locale and content type
		// Render markup
		renderAll(associatedMarkupStream);
	}

A component was added.

Parameters:
component The component that was added
	final void componentAdded(final Component component)
		if (mayTrackChangesFor(componentcomponent.getParent()))
	}

A component's model changed.

Parameters:
component The component whose model is about to change
	final void componentModelChanging(final Component component)
		if (mayTrackChangesFor(componentnull))
			// If it is an inhertiable model then don't call model changing
			// on the version manager.
	}

A component was removed.

Parameters:
component The component that was removed
	final void componentRemoved(final Component component)
		if (mayTrackChangesFor(componentcomponent.getParent()))
	final void componentStateChanging(final Component componentChange change)
		if (mayTrackChangesFor(componentnull))
	}

Sets values for form components based on cookie values in the request.
		// Visit all Forms contained in the page
			// For each FormComponent found on the Page (not Form)
			public Object component(final Component component)
		});
	}

Parameters:
pageMap Sets this page into the page map with the given name. If the page map does not yet exist, it is automatically created.
	final void setPageMap(final IPageMap pageMap)
		// Save transient reference to pagemap
		this. = pageMap;
		// Save name for restoring transient
		 = pageMap.getName();
	}

Set page stateless

Parameters:
stateless
	void setPageStateless(Boolean stateless)
		this. = stateless;
	}

Called when the page is retrieved from Session.
	public void onPageAttached()
			"Page does not support markup. This error can happen if you have extended Page directly, instead extend WebPage");
New to GrepCode? Check out our FAQ X