Hello,

I updated my 1.3.0-SNAPSHOT this morning, and 35 tests failed with
something like

  org.apache.wicket.WicketRuntimeException: Exception in rendering component: 
[MarkupContainer [Component id = modifyFooRuleForm, page = 
org.apache.wicket.util.tester.DummyPanelPage, path = 
1:panel:BarContainer:modifyFooRuleForm.ModifyBarContainer$5, isVisible = true, 
isVersioned = false]]
        at org.apache.wicket.Component.renderComponent(Component.java:2301)
        at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1348)

Could this have something to do with the changes below?

Best wishes, Timo

 

On Wed, 17 Oct 2007, [EMAIL PROTECTED] wrote:

> Author: jcompagner
> Date: Wed Oct 17 15:07:37 2007
> New Revision: 585727
> 
> URL: http://svn.apache.org/viewvc?rev=585727&view=rev
> Log:
> memory usage for the component object optimized to the max.
> I think especially when using Labels a lot there is on average at least 20% 
> memory usage gain
> 
> Modified:
>     wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
>     
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
>     
> wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
> 
> Modified: 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
> URL: 
> http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java?rev=585727&r1=585726&r2=585727&view=diff
> ==============================================================================
> --- 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java 
> (original)
> +++ 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java 
> Wed Oct 17 15:07:37 2007
> @@ -299,11 +299,7 @@
>  
>               public void undo()
>               {
> -                     behaviors.remove(behavior);
> -                     if (behaviors.size() == 0)
> -                     {
> -                             behaviors = null;
> -                     }
> +                     removeBehavior(behavior);
>               }
>  
>       }
> @@ -355,11 +351,7 @@
>  
>               public void undo()
>               {
> -                     if (behaviors == null)
> -                     {
> -                             behaviors = new ArrayList(1);
> -                     }
> -                     behaviors.add(behavior);
> +                     addBehavior(behavior);
>               }
>  
>       }
> @@ -521,33 +513,45 @@
>               }
>       };
>  
> -     private static final int FLAG_AFTER_RENDERING = 0x8000000;
> -
>       /** True when a component is being auto-added */
>       private static final int FLAG_AUTO = 0x0001;
>  
> -     private static final int FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED = 
> 0x1000000;
> -
> -     private static final int FLAG_DETACHING = 0x80000000;
> -
> -     /** True when a component is enabled for model updates and is 
> reachable. */
> -     private static final int FLAG_ENABLED = 0x0080;
> -
>       /** Flag for escaping HTML in model strings */
>       private static final int FLAG_ESCAPE_MODEL_STRINGS = 0x0002;
>  
>       /**
> -      * Boolean whether this component was rendered at least once for 
> tracking changes.
> +      * Boolean whether this component's model is inheritable.
>        */
> -     private static final int FLAG_HAS_BEEN_RENDERED = 0x1000;
> +     private static final int FLAG_INHERITABLE_MODEL = 0x0004;
> +
> +     /** Versioning boolean */
> +     private static final int FLAG_VERSIONED = 0x0008;
> +
> +     /** Visibility boolean */
> +     private static final int FLAG_VISIBLE = 0x0010;
> +
> +     /** Render tag boolean */
> +     private static final int FLAG_RENDER_BODY_ONLY = 0x0020;
>  
>       /** Ignore attribute modifiers */
>       private static final int FLAG_IGNORE_ATTRIBUTE_MODIFIER = 0x0040;
>  
> +     /** True when a component is enabled for model updates and is 
> reachable. */
> +     private static final int FLAG_ENABLED = 0x0080;
> +
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED1 = 0x0100;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED2 = 0x0200;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED3 = 0x0400;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED4 = 0x0800;
> +
>       /**
> -      * Boolean whether this component's model is inheritable.
> +      * Boolean whether this component was rendered at least once for 
> tracking changes.
>        */
> -     private static final int FLAG_INHERITABLE_MODEL = 0x0004;
> +     private static final int FLAG_HAS_BEEN_RENDERED = 0x1000;
>  
>       /**
>        * Internal indicator of whether this component may be rendered given 
> the current context's
> @@ -567,19 +571,33 @@
>        * to visible(false) to visible(true) without the overhead of 
> repainting a visible parent
>        * container
>        */
> -
>       private static final int FLAG_PLACEHOLDER = 0x8000;
>  
> -     /** Render tag boolean */
> -     private static final int FLAG_RENDER_BODY_ONLY = 0x0020;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED5 = 0x10000;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED6 = 0x20000;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED7 = 0x40000;
> +     /** Reserved subclass-definable flag bit */
> +     protected static final int FLAG_RESERVED8 = 0x80000;
> +
> +     private static final int FLAG_MODEL_SET = 0x100000;
>  
> +     private static final int FLAG_BEFORE_RENDERING_SUPER_CALL_VERIFIED = 
> 0x1000000;
> +
> +     /**
> +      * Flag that makes we are in before-render callback phase Set after 
> component.onBeforeRender is
> +      * invoked (right before invoking beforeRender on children)
> +      */
> +     private static final int FLAG_PREPARED_FOR_RENDER = 0x4000000;
>       private static final int FLAG_RENDERING = 0x2000000;
> +     private static final int FLAG_AFTER_RENDERING = 0x8000000;
>  
> -     /** Versioning boolean */
> -     private static final int FLAG_VERSIONED = 0x0008;
>  
> -     /** Visibility boolean */
> -     private static final int FLAG_VISIBLE = 0x0010;
> +     private static final int FLAG_ATTACHED = 0x20000000;
> +     private static final int FLAG_DETACHING = 0x80000000;
> +
>  
>       /** Log. */
>       private static final Logger log = 
> LoggerFactory.getLogger(Component.class);
> @@ -599,28 +617,6 @@
>  
>       };
>       private static final long serialVersionUID = 1L;
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED1 = 0x0100;
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED2 = 0x0200;
> -
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED3 = 0x0400;
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED4 = 0x0800;
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED5 = 0x10000;
> -
> -
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED6 = 0x20000;
> -
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED7 = 0x40000;
> -
> -     /** Reserved subclass-definable flag bit */
> -     protected static final int FLAG_RESERVED8 = 0x80000;
> -
>       /**
>        * Meta data key for line precise error logging for the moment of 
> addition. Made package private
>        * for access in [EMAIL PROTECTED] MarkupContainer} and [EMAIL 
> PROTECTED] Page}
> @@ -639,22 +635,6 @@
>               private static final long serialVersionUID = 1L;
>       };
>  
> -     // static final int FLAG_ATTACH_SUPER_CALL_VERIFIED = 0x10000000;
> -
> -
> -     static final int FLAG_ATTACHED = 0x20000000;
> -
> -     // static final int FLAG_ATTACHING = 0x40000000;
> -
> -     /**
> -      * Flag that makes we are in before-render callback phase Set after 
> component.onBeforeRender is
> -      * invoked (right before invoking beforeRender on children)
> -      */
> -     static final int FLAG_PREPARED_FOR_RENDER = 0x4000000;
> -
> -     /** List of behaviors to be applied for this Component */
> -     private ArrayList behaviors = null;
> -
>       /** Component flags. See FLAG_* for possible non-exclusive flag values. 
> */
>       private int flags = FLAG_VISIBLE | FLAG_ESCAPE_MODEL_STRINGS | 
> FLAG_VERSIONED | FLAG_ENABLED |
>                       FLAG_IS_RENDER_ALLOWED;
> @@ -662,11 +642,6 @@
>       /** Component id. */
>       private String id;
>  
> -     /**
> -      * MetaDataEntry array.
> -      */
> -     private MetaDataEntry[] metaData;
> -
>       /** Any parent container. */
>       private MarkupContainer parent;
>  
> @@ -676,8 +651,18 @@
>        */
>       int markupIndex = -1;
>  
> -     /** The model for this component. */
> -     IModel model;
> +     /**
> +      * MetaDataEntry array.
> +      */
> +// private MetaDataEntry[] metaData;
> +//
> +// /** List of behaviors to be applied for this Component */
> +// private Object behaviors;
> +//
> +// /** The model for this component. */
> +// IModel model;
> +     /** the object that holds the model/metadata and or behaviors */
> +     Object data;
>  
>       /**
>        * Constructor. All components have names. A component's id cannot be 
> null. This is the minimal
> @@ -716,7 +701,7 @@
>       public Component(final String id, final IModel model)
>       {
>               this(id);
> -             this.model = wrap(model);
> +             setModelImp(model);
>       }
>  
>       /**
> @@ -739,13 +724,7 @@
>                       throw new IllegalArgumentException("Argument may not be 
> null");
>               }
>  
> -             // Lazy create
> -             if (behaviors == null)
> -             {
> -                     behaviors = new ArrayList(1);
> -             }
> -
> -             behaviors.add(behavior);
> +             addBehavior(behavior);
>  
>               if (!behavior.isTemporary())
>               {
> @@ -758,6 +737,68 @@
>               return this;
>       }
>  
> +     private void addBehavior(final IBehavior behavior)
> +     {
> +             if (data == null)
> +             {
> +                     data = behavior;
> +             }
> +             else
> +             {
> +                     if (data instanceof Object[])
> +                     {
> +                             Object[] tmp = (Object[])data;
> +                             Object[] array = new Object[tmp.length + 1];
> +                             System.arraycopy(tmp, 0, array, 0, tmp.length);
> +                             array[tmp.length] = behavior;
> +                             data = array;
> +                     }
> +                     else
> +                     {
> +                             Object[] array = new Object[2];
> +                             array[0] = data;
> +                             array[1] = behavior;
> +                             data = array;
> +                     }
> +             }
> +     }
> +
> +     private List getBehaviorsIntern()
> +     {
> +             if (data != null)
> +             {
> +                     boolean modelSet = getFlag(FLAG_MODEL_SET);
> +                     if (data instanceof Object[])
> +                     {
> +                             Object[] tmp = (Object[])data;
> +                             int i = 0;
> +                             // If the model is set jump one
> +                             if (modelSet)
> +                                     i++;
> +                             // if the current one is not a behavior 
> (metadata) jump one.
> +                             if (!(tmp[i] instanceof IBehavior))
> +                                     i++;
> +
> +                             if (i < tmp.length)
> +                             {
> +                                     ArrayList al = new ArrayList(tmp.length 
> - i);
> +                                     for (int j = i; j < tmp.length; j++)
> +                                     {
> +                                             al.add(tmp[j]);
> +                                     }
> +                                     return al;
> +                             }
> +                     }
> +                     else if (!modelSet && data instanceof IBehavior)
> +                     {
> +                             ArrayList al = new ArrayList();
> +                             al.add(data);
> +                             return al;
> +                     }
> +             }
> +             return null;
> +     }
> +
>       /**
>        * Called on very component after the page is rendered. It will call 
> onAfterRender for it self
>        * and its children.
> @@ -907,7 +948,7 @@
>               // The model will be created next time.
>               if (getFlag(FLAG_INHERITABLE_MODEL))
>               {
> -                     model = null;
> +                     setModelImp(null);
>                       setFlag(FLAG_INHERITABLE_MODEL, false);
>               }
>       }
> @@ -922,6 +963,7 @@
>        */
>       public final void detachBehaviors()
>       {
> +             List behaviors = getBehaviorsIntern();
>               if (behaviors != null)
>               {
>                       for (Iterator i = behaviors.iterator(); i.hasNext();)
> @@ -1240,7 +1282,28 @@
>        */
>       public final Serializable getMetaData(final MetaDataKey key)
>       {
> -             return key.get(metaData);
> +             return key.get(getMetaData());
> +     }
> +
> +     private MetaDataEntry[] getMetaData()
> +     {
> +             if (data instanceof MetaDataEntry[])
> +             {
> +                     return (MetaDataEntry[])data;
> +             }
> +             else if (data instanceof Object[])
> +             {
> +                     Object[] tmp = (Object[])data;
> +                     if (tmp[0] instanceof MetaDataEntry[])
> +                     {
> +                             return (MetaDataEntry[])tmp[0];
> +                     }
> +                     else if (tmp[1] instanceof MetaDataEntry[])
> +                     {
> +                             return (MetaDataEntry[])tmp[1];
> +                     }
> +             }
> +             return null;
>       }
>  
>       /**
> @@ -1250,11 +1313,13 @@
>        */
>       public final IModel getModel()
>       {
> +             IModel model = getModelImpl();
>               // If model is null
>               if (model == null)
>               {
>                       // give subclass a chance to lazy-init model
>                       model = initModel();
> +                     setModelImp(model);
>               }
>  
>               return model;
> @@ -1924,25 +1989,64 @@
>               {
>                       throw new IllegalArgumentException("Argument `behavior` 
> cannot be null");
>               }
> -             if (behaviors == null || !behaviors.contains(behavior))
> +
> +             if (removeBehavior(behavior))
> +             {
> +                     if (!behavior.isTemporary())
> +                     {
> +                             addStateChange(new 
> RemovedBehaviorChange(behavior));
> +                     }
> +             }
> +             else
>               {
>                       throw new IllegalStateException(
>                                       "Tried to remove a behavior that was 
> not added to the component. Behavior: " +
>                                                       behavior.toString());
>               }
> +             return this;
> +     }
>  
> -             if (!behavior.isTemporary())
> +     private boolean removeBehavior(final IBehavior behavior)
> +     {
> +             if (behavior.equals(data))
>               {
> -                     addStateChange(new RemovedBehaviorChange(behavior));
> +                     data = null;
> +                     return true;
>               }
> -             behaviors.remove(behavior);
> -
> -             if (behaviors.size() == 0)
> +             else if (data instanceof Object[])
>               {
> -                     behaviors = null;
> +                     Object[] array = (Object[])data;
> +                     for (int i = 0; i < array.length; i++)
> +                     {
> +                             if (array[i].equals(behavior))
> +                             {
> +                                     if (array.length == 2)
> +                                     {
> +                                             if (i == 0)
> +                                             {
> +                                                     data = array[1];
> +                                             }
> +                                             else
> +                                             {
> +                                                     data = array[0];
> +                                             }
> +                                     }
> +                                     else
> +                                     {
> +                                             Object[] tmp = new 
> Object[array.length - 1];
> +                                             System.arraycopy(array, 0, tmp, 
> 0, i);
> +                                             i++;
> +                                             if (i != array.length)
> +                                             {
> +                                                     System.arraycopy(array, 
> i, tmp, i - 1, array.length - i);
> +                                             }
> +                                             data = array;
> +                                     }
> +                                     return true;
> +                             }
> +                     }
>               }
> -
> -             return this;
> +             return false;
>       }
>  
>       /**
> @@ -2018,6 +2122,7 @@
>                       {
>                               // Call each behaviors onException() to allow 
> the
>                               // behavior to clean up
> +                             List behaviors = getBehaviorsIntern();
>                               if (behaviors != null)
>                               {
>                                       for (Iterator i = behaviors.iterator(); 
> i.hasNext();)
> @@ -2233,6 +2338,7 @@
>  
>                       // Ask all behaviors if they have something to 
> contribute to the
>                       // header or body onLoad tag.
> +                     List behaviors = getBehaviorsIntern();
>                       if (behaviors != null)
>                       {
>                               final Iterator iter = behaviors.iterator();
> @@ -2411,7 +2517,91 @@
>        */
>       public final void setMetaData(final MetaDataKey key, final Serializable 
> object)
>       {
> -             metaData = key.set(metaData, object);
> +             MetaDataEntry[] metaData = key.set(getMetaData(), object);
> +             if (data == null || data instanceof MetaDataEntry[])
> +             {
> +                     data = metaData;
> +             }
> +             else if (data instanceof Object[])
> +             {
> +                     Object[] tmp = (Object[])data;
> +                     boolean modelSet = getFlag(FLAG_MODEL_SET);
> +                     if (modelSet)
> +                     {
> +                             if (tmp[1] instanceof MetaDataEntry[])
> +                             {
> +                                     if (metaData == null)
> +                                     {
> +                                             if (tmp.length == 2)
> +                                             {
> +                                                     data = tmp[0];
> +                                             }
> +                                             else
> +                                             {
> +                                                     Object[] array = new 
> Object[tmp.length - 1];
> +                                                     array[0] = tmp[0]; // 
> model
> +                                                     System.arraycopy(tmp, 
> 2, array, 1, tmp.length - 2);
> +                                                     data = array;
> +                                             }
> +                                     }
> +                                     else
> +                                     {
> +                                             tmp[1] = metaData;
> +                                     }
> +                             }
> +                             else if (metaData != null)
> +                             {
> +                                     Object[] array = new Object[tmp.length 
> + 1];
> +                                     array[0] = tmp[0]; // the model
> +                                     array[1] = metaData;
> +                                     System.arraycopy(tmp, 1, array, 2, 
> tmp.length - 1); // behaviors
> +                                     data = array;
> +                             }
> +                     }
> +                     else if (tmp[0] instanceof MetaDataEntry[])
> +                     {
> +                             if (metaData == null)
> +                             {
> +                                     if (tmp.length == 2)
> +                                     {
> +                                             data = tmp[1];
> +                                     }
> +                                     else
> +                                     {
> +                                             Object[] array = new 
> Object[tmp.length - 1];
> +                                             System.arraycopy(tmp, 1, array, 
> 0, tmp.length - 1);
> +                                             data = array;
> +                                     }
> +                             }
> +                             else
> +                             {
> +                                     tmp[0] = metaData;
> +                             }
> +                     }
> +                     else if (metaData != null)
> +                     {
> +                             Object[] array = new Object[tmp.length + 1];
> +                             array[0] = metaData;
> +                             System.arraycopy(tmp, 0, array, 1, tmp.length); 
> // behaviors
> +                             data = array;
> +                     }
> +             }
> +             else if (metaData != null)
> +             {
> +                     Object[] array = new Object[2];
> +                     boolean modelSet = getFlag(FLAG_MODEL_SET);
> +                     if (modelSet)
> +                     {
> +                             array[0] = data;
> +                             array[1] = metaData;
> +                     }
> +                     else
> +                     {
> +                             array[0] = metaData;
> +                             array[1] = data;
> +                     }
> +                     data = array;
> +             }
>       }
>  
>       /**
> @@ -2427,13 +2617,13 @@
>        */
>       public Component setModel(final IModel model)
>       {
> +             IModel prevModel = getModelImpl();
>               // Detach current model
> -             if (this.model != null)
> +             if (prevModel != null)
>               {
> -                     this.model.detach();
> +                     prevModel.detach();
>               }
>  
> -             IModel prevModel = this.model;
>               if (prevModel instanceof IWrapModel)
>               {
>                       prevModel = ((IWrapModel)prevModel).getWrappedModel();
> @@ -2447,13 +2637,88 @@
>                               addStateChange(new 
> ComponentModelChange(prevModel));
>                       }
>  
> -                     this.model = wrap(model);
> +                     setModelImp(wrap(model));
>               }
>  
>               modelChanged();
>               return this;
>       }
>  
> +     IModel getModelImpl()
> +     {
> +             if (getFlag(FLAG_MODEL_SET))
> +             {
> +                     if (data instanceof IModel)
> +                     {
> +                             return (IModel)data;
> +                     }
> +                     else if (data instanceof Object[])
> +                     {
> +                             return (IModel)((Object[])data)[0];
> +                     }
> +             }
> +             return null;
> +     }
> +
> +     void setModelImp(IModel model)
> +     {
> +             if (getFlag(FLAG_MODEL_SET))
> +             {
> +                     if (data instanceof IModel)
> +                     {
> +                             data = model;
> +                     }
> +                     else if (data instanceof Object[])
> +                     {
> +                             if (model == null)
> +                             {
> +                                     Object[] tmp = (Object[])data;
> +                                     if (tmp.length > 2)
> +                                     {
> +                                             Object[] array = new 
> Object[tmp.length - 1];
> +                                             System.arraycopy(tmp, 1, array, 
> 0, array.length);
> +                                             data = array;
> +                                     }
> +                                     else
> +                                     {
> +                                             data = tmp[1];
> +                                     }
> +                             }
> +                             else
> +                             {
> +                                     ((Object[])data)[0] = model;
> +                             }
> +                     }
> +             }
> +             else if (model != null)
> +             {
> +                     if (data == null)
> +                     {
> +                             data = model;
> +                     }
> +                     else
> +                     {
> +                             if (data instanceof Object[])
> +                             {
> +                                     Object[] tmp = (Object[])data;
> +                                     Object[] array = new Object[tmp.length 
> + 1];
> +                                     System.arraycopy(tmp, 0, array, 1, 
> tmp.length);
> +                                     array[0] = model;
> +                                     data = array;
> +                             }
> +                             else
> +                             {
> +                                     Object[] array = new Object[2];
> +                                     array[0] = model;
> +                                     array[1] = data;
> +                                     data = array;
> +                             }
> +                     }
> +             }
> +             setFlag(FLAG_MODEL_SET, model != null);
> +
> +     }
> +
>       /**
>        * Sets the backing model object; shorthand for 
> getModel().setObject(object).
>        * 
> @@ -2830,6 +3095,7 @@
>        */
>       private void notifyBehaviorsComponentBeforeRender()
>       {
> +             List behaviors = getBehaviorsIntern();
>               if (behaviors != null)
>               {
>                       for (Iterator i = behaviors.iterator(); i.hasNext();)
> @@ -2850,6 +3116,7 @@
>       private void notifyBehaviorsComponentRendered()
>       {
>               // notify the behaviors that component has been rendered
> +             List behaviors = getBehaviorsIntern();
>               if (behaviors != null)
>               {
>                       for (Iterator i = behaviors.iterator(); i.hasNext();)
> @@ -2949,6 +3216,7 @@
>        */
>       protected void detachModel()
>       {
> +             IModel model = getModelImpl();
>               if (model != null)
>               {
>                       model.detach();
> @@ -3015,6 +3283,7 @@
>        */
>       protected List/* <IBehavior> */getBehaviors(Class type)
>       {
> +             List behaviors = getBehaviorsIntern();
>               if (behaviors == null)
>               {
>                       return Collections.EMPTY_LIST;
> @@ -3119,7 +3388,7 @@
>                       // Don't call the getModel() that could initialize many 
> inbetween
>                       // completely useless models.
>                       // IModel model = current.getModel();
> -                     IModel model = current.model;
> +                     IModel model = current.getModelImpl();
>  
>                       if (model instanceof IWrapModel)
>                       {
> @@ -3323,10 +3592,6 @@
>        */
>       protected void onDetach()
>       {
> -             if (behaviors != null)
> -             {
> -                     behaviors.trimToSize();
> -             }
>               setFlag(FLAG_DETACHING, false);
>  
>       }
> @@ -3376,6 +3641,7 @@
>               if (!(tag instanceof WicketTag) || !stripWicketTags)
>               {
>                       // Apply behavior modifiers
> +                     List behaviors = getBehaviorsIntern();
>                       if ((behaviors != null) && !behaviors.isEmpty() && 
> !tag.isClose() &&
>                                       (isIgnoreAttributeModifier() == false))
>                       {
> @@ -3396,10 +3662,10 @@
>                       // apply behaviors that are attached to the component 
> tag.
>                       if (tag.hasBehaviors())
>                       {
> -                             Iterator behaviors = tag.getBehaviors();
> -                             while (behaviors.hasNext())
> +                             Iterator tagBehaviors = tag.getBehaviors();
> +                             while (tagBehaviors.hasNext())
>                               {
> -                                     final IBehavior behavior = 
> (IBehavior)behaviors.next();
> +                                     final IBehavior behavior = 
> (IBehavior)tagBehaviors.next();
>                                       behavior.onComponentTag(this, tag);
>                               }
>                       }
> 
> Modified: 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
> URL: 
> http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=585727&r1=585726&r2=585727&view=diff
> ==============================================================================
> --- 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
>  (original)
> +++ 
> wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
>  Wed Oct 17 15:07:37 2007
> @@ -697,7 +697,7 @@
>        */
>       public Component setModel(final IModel model)
>       {
> -             final IModel previous = this.model;
> +             final IModel previous = getModelImpl();
>               super.setModel(model);
>               if (previous instanceof IComponentInheritedModel)
>               {
> 
> Modified: 
> wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
> URL: 
> http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html?rev=585727&r1=585726&r2=585727&view=diff
> ==============================================================================
> --- 
> wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
>  (original)
> +++ 
> wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
>  Wed Oct 17 15:07:37 2007
> @@ -34,13 +34,13 @@
>               <tr wicket:id="components">
>                 <td valign="top" align="left"><span 
> wicket:id="row">1</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="path">label1</span>&nbsp;&nbsp;&nbsp;</td>
> -               <td valign="top" align="left" nowrap><span 
> wicket:id="size">491 bytes</span>&nbsp;&nbsp;&nbsp;</td>
> +               <td valign="top" align="left" nowrap><span 
> wicket:id="size">390 bytes</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="type">org.apache.wicket.markup.html.basic.Label</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="model">test1</span>&nbsp;&nbsp;&nbsp;</td>
>               </tr><tr wicket:id="components">
>                 <td valign="top" align="left"><span 
> wicket:id="row">2</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="path">label2</span>&nbsp;&nbsp;&nbsp;</td>
> -               <td valign="top" align="left" nowrap><span 
> wicket:id="size">492 bytes</span>&nbsp;&nbsp;&nbsp;</td>
> +               <td valign="top" align="left" nowrap><span 
> wicket:id="size">391 bytes</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="type">org.apache.wicket.markup.html.basic.Label</span>&nbsp;&nbsp;&nbsp;</td>
>                 <td valign="top" align="left"><span 
> wicket:id="model">test22</span>&nbsp;&nbsp;&nbsp;</td>
>               </tr>
> 
> 

-- 
Timo Rantalaiho           
Reaktor Innovations Oy    <URL: http://www.ri.fi/ >

Reply via email to