org.apache.wicket.markup.html.border
Class Border

java.lang.Object
  extended by org.apache.wicket.Component
      extended by org.apache.wicket.MarkupContainer
          extended by org.apache.wicket.markup.html.WebMarkupContainer
              extended by org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup
                  extended by org.apache.wicket.markup.html.border.Border
All Implemented Interfaces:
Serializable, IClusterable, IConverterLocator, IHeaderPartContainerProvider, IComponentResolver
Direct Known Subclasses:
AjaxFallbackOrderByBorder, BoxBorder, FormComponentFeedbackBorder, LibraryApplicationBorder, NavomaticBorder, OrderByBorder, TemplateBorder

public abstract class Border
extends WebMarkupContainerWithAssociatedMarkup
implements IComponentResolver

A border component has associated markup which is drawn and determines placement of any markup and/or components nested within the border component.

The portion of the border's associated markup file which is to be used in rendering the border is denoted by a <wicket:border> tag. The children of the border component instance are then inserted into this markup, replacing the first <wicket:body> tag in the border's associated markup.

For example, if a border's associated markup looked like this:

   <html>
   <body>
     <wicket:border>
       First <wicket:body/> Last
     </wicket:border>
   </body>
   </html>
 
And the border was used on a page like this:
   <html>
   <body>
     <span wicket:id = "myBorder">
       Middle
     </span>
   </body>
   </html>
 
Then the resulting HTML would look like this:
   <html>
   <body>
     First Middle Last
   </body>
   </html>
 
In other words, the body of the myBorder component is substituted into the border's associated markup at the position indicated by the <wicket:body> tag.

Regarding <wicket:body/> you have two options. Either use <wicket:body/> (open-close tag) which will automatically be expanded to <wicket:body>body content</wicket:body> or use <wicket:body>preview region</wicket:body> in your border's markup. The preview region (everything in between the open and close tag) will automatically be removed.

Note that if body is not an immediate child of border (example see below), than you must use code like the following someContainer.add(getBodyContainer()) to add the body component to the correct container.

   <html>
   <body>
     <wicket:border>
       <span wicket:id="someContainer">
         <wicket:body/>
       </span>
     </wicket:border>
   </body>
   </html>
 

IMPORTANT NOTE
It is important that components added to the border by downstream users are added to the border's body container instead of directly to the border. This will properly maintain the component hierarchy synchronicity with markup hierarchy because in markup children are added under the border:body tag which is presented by the border's body container and not the border itself. Here is an example of an improper usage of the border:

 BoxBorder border=new BoxBorder("border");
 border.add(new Label("label")); <== INVALID
 
Instead, the label should be added to border's body container:
 BoxBorder border=new BoxBorder("border");
 border.getBodyContainer().add(new Label("label")); <== VALID
 

Author:
Jonathan Locke, Juergen Donnerstag
See Also:
BorderBodyResolver, Border.BorderBodyContainer, Serialized Form

Nested Class Summary
 class Border.BorderBodyContainer
          The container to be associated with the <wicket:body> tag
 
Nested classes/interfaces inherited from class org.apache.wicket.Component
Component.ComponentModelChange, Component.EnabledChange, Component.IVisitor<T extends Component>, Component.VisibilityChange
 
Field Summary
 
Fields inherited from class org.apache.wicket.Component
ENABLE, FLAG_CONFIGURED, FLAG_INITIALIZED, FLAG_REMOVING_FROM_HIERARCHY, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED6, FLAG_RESERVED7, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER
 
Constructor Summary
Border(String id)
           
Border(String id, IModel<?> model)
           
 
Method Summary
 Border.BorderBodyContainer getBodyContainer()
          Gets the container associated with <wicket:body>
 boolean isTransparentResolver()
          Some MarkupContainers (e.g.
protected  void onComponentTag(ComponentTag tag)
          Processes the component tag.
protected  void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)
          Handle the container's body.
 void renderHead(HtmlHeaderContainer container)
          Print to the web response what ever the component wants to contribute to the head section.
 boolean resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag)
          Try to resolve the tag, then create a component, add it to the container and render it.
 Border setBorderBodyVisible(boolean bodyVisible)
          Deprecated. 1.3 please use #getBodyContainer().setVisible(false) instead
 Border setTransparentResolver(boolean enable)
          Borders used for bordered pages should set it to "true".
 
Methods inherited from class org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup
newHeaderPartContainer, renderHeadFromAssociatedMarkupFile
 
Methods inherited from class org.apache.wicket.markup.html.WebMarkupContainer
getMarkupType, getWebPage, getWebRequest
 
Methods inherited from class org.apache.wicket.MarkupContainer
add, addOrReplace, autoAdd, autoAdd, contains, findMarkupStream, get, get, getAssociatedMarkupStream, getMarkupStream, hasAssociatedMarkup, internalAdd, iterator, iterator, newMarkupResourceStream, onAfterRenderChildren, onRender, remove, remove, removeAll, renderAll, renderAssociatedMarkup, renderComponentTagBody, renderNext, replace, setDefaultModel, setMarkupStream, size, swap, toString, toString, visitChildren, visitChildren
 
Methods inherited from class org.apache.wicket.Component
add, addStateChange, afterRender, beforeRender, callOnBeforeRenderIfNotVisible, checkComponentTag, checkComponentTagAttribute, checkHierarchyChange, configure, continueToOriginalDestination, debug, detach, detachBehaviors, detachModel, detachModels, determineVisibility, error, exceptionMessage, fatal, findPage, findParent, findParentWithAssociatedMarkup, getAjaxRegionMarkupId, getApplication, getBehaviors, getBehaviors, getBehaviorsRawList, getClassRelativePath, getComponentBorder, getConverter, getConverter, getDefaultModel, getDefaultModelObject, getDefaultModelObjectAsString, getDefaultModelObjectAsString, getEscapeModelStrings, getFeedbackMessage, getFlag, getFlag, getId, getInnermostModel, getInnermostModel, getLocale, getLocalizer, getMarkupAttributes, getMarkupId, getMarkupId, getMarkupIdImpl, getMetaData, getModelComparator, getOutputMarkupId, getOutputMarkupPlaceholderTag, getPage, getPageRelativePath, getParent, getPath, getRenderBodyOnly, getRequest, getRequestCycle, getResponse, getSession, getSizeInBytes, getStatelessHint, getString, getString, getString, getStyle, getVariation, hasBeenRendered, hasErrorMessage, hasFeedbackMessage, info, initModel, internalAttach, internalDetach, internalOnAttach, internalOnDetach, internalOnModelChanged, isActionAuthorized, isAncestorOf, isAttached, isBehaviorAccepted, isEnableAllowed, isEnabled, isEnabledInHierarchy, isIgnoreAttributeModifier, isRenderAllowed, isStateless, isVersioned, isVisibilityAllowed, isVisible, isVisibleInHierarchy, locateMarkupStream, markAttached, markRendering, modelChanged, modelChanging, onAfterRender, onAttach, onBeforeRender, onBeginRequest, onConfigure, onDetach, onEndRequest, onInitialize, onModelChanged, onModelChanging, onRemove, prepareForRender, prepareForRender, redirectToInterceptPage, remove, remove, render, render, renderComponent, renderComponent, renderComponentTag, rendered, renderPlaceholderTag, replaceComponentTagBody, replaceWith, sameInnermostModel, sameInnermostModel, setAuto, setComponentBorder, setDefaultModelObject, setEnabled, setEscapeModelStrings, setFlag, setFlag, setIgnoreAttributeModifier, setMarkupId, setMarkupIdImpl, setMetaData, setOutputMarkupId, setOutputMarkupPlaceholderTag, setRedirect, setRenderBodyOnly, setResponsePage, setResponsePage, setResponsePage, setVersioned, setVisibilityAllowed, setVisible, urlFor, urlFor, urlFor, urlFor, urlFor, urlFor, visitParents, warn, wrap
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Border

public Border(String id)
See Also:
Component.Component(String)

Border

public Border(String id,
              IModel<?> model)
See Also:
Component.Component(String, IModel)
Method Detail

getBodyContainer

public final Border.BorderBodyContainer getBodyContainer()
Gets the container associated with <wicket:body>

Returns:
The border body container

setBorderBodyVisible

@Deprecated
public Border setBorderBodyVisible(boolean bodyVisible)
Deprecated. 1.3 please use #getBodyContainer().setVisible(false) instead

When this method is called with a false value the components and raw markup that this border wraps will not be rendered.

Parameters:
bodyVisible -
Returns:
this for chaining

setTransparentResolver

public final Border setTransparentResolver(boolean enable)
Borders used for bordered pages should set it to "true". Default is "false". If enabled, than requests to find a component are passed to the parent container as well. Thus the child may not be added to the Border, but might be added to the parent of the Border as well.

Parameters:
enable - true, to enable transparent resolving
Returns:
this for chaining

isTransparentResolver

public boolean isTransparentResolver()
Description copied from class: MarkupContainer
Some MarkupContainers (e.g. HtmlHeaderContainer) have to be transparent with respect to their child components. A transparent container gets its children from its parent container.

Overrides:
isTransparentResolver in class MarkupContainer
Returns:
false. By default a MarkupContainer is not transparent.
See Also:
setTransparentResolver(boolean), MarkupContainer.isTransparentResolver()

resolve

public boolean resolve(MarkupContainer container,
                       MarkupStream markupStream,
                       ComponentTag tag)
Description copied from interface: IComponentResolver
Try to resolve the tag, then create a component, add it to the container and render it.

Specified by:
resolve in interface IComponentResolver
Parameters:
container - The container parsing its markup
markupStream - The current markupStream
tag - The current component tag while parsing the markup
Returns:
True if component-id was handled by the resolver, false otherwise.
See Also:
IComponentResolver.resolve(org.apache.wicket.MarkupContainer, org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)

onComponentTag

protected void onComponentTag(ComponentTag tag)
Description copied from class: Component
Processes the component tag.

Overrides of this method most likely should call the super implementation.

Overrides:
onComponentTag in class Component
Parameters:
tag - Tag to modify
See Also:
Component.onComponentTag(org.apache.wicket.markup.ComponentTag)

onComponentTagBody

protected final void onComponentTagBody(MarkupStream markupStream,
                                        ComponentTag openTag)
Description copied from class: MarkupContainer
Handle the container's body. If your override of this method does not advance the markup stream to the close tag for the openTag, a runtime exception will be thrown by the framework.

Overrides:
onComponentTagBody in class MarkupContainer
Parameters:
markupStream - The markup stream
openTag - The open tag for the body
See Also:
Component.onComponentTagBody(org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)

renderHead

public void renderHead(HtmlHeaderContainer container)
Description copied from class: Component
Print to the web response what ever the component wants to contribute to the head section. Make sure that all attached behaviors are asked as well.

NOT intended for overriding by framework clients. Rather, use IHeaderContributor.renderHead(org.apache.wicket.markup.html.IHeaderResponse)

Overrides:
renderHead in class Component
Parameters:
container - The HtmlHeaderContainer
See Also:
Component.renderHead(org.apache.wicket.markup.html.internal.HtmlHeaderContainer)


Copyright © 2004-2011 Apache Software Foundation. All Rights Reserved.