Hi,

I am not sure whether this should be a concern.
Before having Component#getMarkupIdFromMarkup() it was possible to have such
code:

public MyPanel(String id) {
super(id);

WebMarkupContainer a = new WebMarkupContainer("a");
add(a);
 WebMarkupContainer b = new WebMarkupContainer("b");
add(b);
 b.add(new SimpleAttributeModifier("aId", a.getMarkupId()));
}

Now such usage of a.getMarkupId() is no more possible. It should be wrapped
in dynamic model.
Not a big deal but it shows that the new feature breaks old code.


On Thu, Nov 25, 2010 at 5:17 PM, Martin Grigorov <[email protected]>wrote:

> https://issues.apache.org/jira/browse/WICKET-3197
>  <https://issues.apache.org/jira/browse/WICKET-3197>have fun ;-)
>
>
> On Thu, Nov 25, 2010 at 4:58 PM, Juergen Donnerstag <
> [email protected]> wrote:
>
>> >This means .addOrReplace() cannot be used in Page constructor, even
>> >indirectly.
>> Please provide a test case and I'll have a look.
>>
>> >Can we add some check in
>> org.apache.wicket.Component.getMarkupIdFromMarkup()
>> >so that it immediately returns 'null' if the markup is not available ?
>> We could but I don't like the idea. The name implies that needs access
>> to the markup. If markup is not available that clearly is an error =>
>> exception
>>
>> >org.apache.wicket.Component.onMarkupAttached() doesn't set any flag that
>> the
>> >markup is available.
>> Doesn't need to. The process make sure it's called only once (I hope).
>>
>> >If we use this approach then we will have to add javadoc line to this
>> method
>> >that it works only when the markup is available.
>> good point.
>>
>> I agree the issue probably is with addOrReplace(). I don't think I
>> added any testcase for that. But I'm happy to look after if you could
>> provide a (failing) testcase
>>
>> Juergen
>>
>>
>> On Thu, Nov 25, 2010 at 4:34 PM, Martin Grigorov <[email protected]>
>> wrote:
>> > Quick and dirty workaround to be able to run the app:
>> >
>> > if (getFlag(FLAG_INITIALIZED) && parent != null)
>> > { /* the current body of getMarkupIdFromMarkup() */ }
>> > return null;
>> >
>> > On Thu, Nov 25, 2010 at 4:28 PM, Martin Grigorov <[email protected]
>> >wrote:
>> >
>> >> My app is not happy with this new method. I guess other apps will
>> complain
>> >> too.
>> >>
>> >> Moved the code to onInitialize() and now the new exception is:
>> >>
>> >> org.apache.wicket.markup.MarkupException: Can not determine Markup.
>> >> Component is not yet connected to a parent. [WebMarkupContainer
>> [Component
>> >> id = applyTable]]
>> >> at org.apache.wicket.Component.getMarkup(Component.java:717)
>> >> at org.apache.wicket.Component.getMarkupTag(Component.java:1438)
>> >> at
>> org.apache.wicket.Component.getMarkupIdFromMarkup(Component.java:849)
>> >> at org.apache.wicket.Component.getMarkupIdImpl(Component.java:1484)
>> >> at org.apache.wicket.MarkupContainer.replace(MarkupContainer.java:807)
>> >> at
>> org.apache.wicket.MarkupContainer.addOrReplace(MarkupContainer.java:239)
>> >>  at
>> com.fredhopper.bm.layout.ControlPanel.setOnApply(ControlPanel.java:192)
>> >> at com.fredhopper.bm.layout.TopPanel.setOnApply(TopPanel.java:67)
>> >> at
>> >>
>> com.fredhopper.bm.pages.search.SynonymsPage.<init>(SynonymsPage.java:123)
>> >> ......
>> >>
>> >> This means .addOrReplace() cannot be used in Page constructor, even
>> >> indirectly.
>> >> Can we add some check in
>> >> org.apache.wicket.Component.getMarkupIdFromMarkup() so that it
>> immediately
>> >> returns 'null' if the markup is not available ?
>> >> org.apache.wicket.Component.onMarkupAttached() doesn't set any flag
>> that
>> >> the markup is available.
>> >> If we use this approach then we will have to add javadoc line to this
>> >> method that it works only when the markup is available.
>> >>
>> >> On Wed, Nov 24, 2010 at 10:32 PM, Juergen Donnerstag <
>> >> [email protected]> wrote:
>> >>
>> >>> Excepted is:
>> >>> - if a component provides its own markup either via subclassing
>> >>> getMarkup() or is expected to have associated markup (e.g. Panel) =>
>> >>> markup available in ctor
>> >>> - Component.onMarkupAttached() is invoked as soon as the markup is
>> >>> available. E.g. a child to a Panel. child.onMarkupAttached() is
>> >>> invoked when child gets added to panel
>> >>> - onInitialize() gets called once a path to the Page is available
>> >>>
>> >>> Juergen
>> >>>
>> >>> On Wed, Nov 24, 2010 at 10:06 PM, Martin Grigorov <
>> [email protected]>
>> >>> wrote:
>> >>> > Hi,
>> >>> >
>> >>> > I just updated my app to latest 1.5 and the following exception
>> >>> happened:
>> >>> >
>> >>> > org.apache.wicket.WicketRuntimeException: No Page found for
>> component
>> >>> > [ShortcutsPanel [Component id = componentItem]]
>> >>> > at org.apache.wicket.Component.getPage(Component.java:1787)
>> >>> > at
>> >>>
>> org.apache.wicket.MarkupContainer.getMarkupType(MarkupContainer.java:531)
>> >>> > at
>> >>> >
>> >>>
>> org.apache.wicket.MarkupContainer.getAssociatedMarkup(MarkupContainer.java:441)
>> >>> > at
>> >>> >
>> >>>
>> org.apache.wicket.markup.html.panel.Panel$PanelMarkupHelper.getMarkup(Panel.java:166)
>> >>> > at
>> org.apache.wicket.markup.html.panel.Panel.getMarkup(Panel.java:142)
>> >>> > at org.apache.wicket.Component.getMarkup(Component.java:722)
>> >>> > at org.apache.wicket.Component.getMarkupTag(Component.java:1436)
>> >>> > at
>> org.apache.wicket.Component.getMarkupIdFromMarkup(Component.java:847)
>> >>> > <<<<<<<<<<<< new
>> >>> > at org.apache.wicket.Component.getMarkupIdImpl(Component.java:1482)
>> >>> > at org.apache.wicket.Component.getMarkupId(Component.java:1537)
>> >>> > at org.apache.wicket.Component.getMarkupId(Component.java:1599)
>> >>> > at
>> >>> >
>> >>>
>> com.fredhopper.bm.components.savedsearches.ShortcutsPanel.<init>(ShortcutsPanel.java:184)
>> >>> > ....
>> >>> >
>> >>> > In ShortcutsPanel's ctor we need to get the markupId of one of the
>> >>> > components in this Panel ...
>> >>> > I know that if I move the code to onInitialize() then everything
>> will be
>> >>> OK,
>> >>> > but I wanted to discuss with you whether the new behavior is OK for
>> 1.5.
>> >>> >
>> >>>
>> >>
>> >>
>> >
>>
>
>

Reply via email to