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. > >>> > > >>> > >> > >> > > >
