Here is a quickstart. I replaced SimpleAttributeModifier with AttributeModifier backed by AbstractReadOnlyModel and my app is back in the game :-)
On Sat, Dec 4, 2010 at 12:08 PM, Juergen Donnerstag < [email protected]> wrote: > I don't think you are right. Your example will will. The error only > occured with addOrReplace() and only if a component was replaced. > > Juergen > > On Sat, Dec 4, 2010 at 11:39 AM, Martin Grigorov <[email protected]> > wrote: > > 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. > >>> >>> > > >>> >>> > >>> >> > >>> >> > >>> > > >>> > >> > >> > > >
markupId.tgz
Description: GNU Zip compressed data
