Hi,

there have been some changes related to queued components recently.
Previously MarkupContainer#onInitialize() would trigger loading of the markup, this is no longer the case. See the 7.2 stacktrace:

    HomePage.getMarkupResourceStream(MarkupContainer, Class<?>) line: 28
MarkupFactory.getMarkupResourceStream(MarkupContainer, Class<?>) line: 320
    MarkupCache.getMarkup(MarkupContainer, Class<?>, boolean) line: 296
    MarkupFactory.getMarkup(MarkupContainer, Class<?>, boolean) line: 236
    MarkupFactory.getMarkup(MarkupContainer, boolean) line: 194
    HomePage(MarkupContainer).getAssociatedMarkup() line: 456
    HomePage(MarkupContainer).getRegionMarkup() line: 2224
    HomePage(MarkupContainer).newDequeueContext() line: 2211
HomePage(MarkupContainer).dequeueAutoComponents() line: 1670 <---- no longer called in 7.3
    HomePage(MarkupContainer).onInitialize() line: 1664
    HomePage(Page).onInitialize() line: 299

IMHO your best option is to trigger loading of markup by yourself from #onInitialize().

Have fun
Sven


On 07.07.2016 12:15, Renner, Ingo wrote:

Hi,

the page classes of our wicket application read their html markup from the filesystem, where they are generated by a CMS system.

In the markup of these pages we have special tags which we replace with real tags and add some wicket components to the page.

This is nearly the same way which was/is used in the wicket brix cms.

Last cause: Cannot modify component hierarchy after render phase has started (page version cant change then anymore) WicketMessage: Markup of type 'html' for component 'com.lr.HomePage' not found. Enable debug messages for org.apache.wicket.util.resource to get a list of all filenames tried:
[Page class = com.lr.HomePage, id = 0, render count = 1]

This is just a demo which shows the same technology used in our real code, but in a more simple way:

This is the interesting method from the Page class with some comments:

@Override

*public*IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) {

// This simulates loading the template from external source

InputStream src= HomePage.*class*.getResourceAsStream("HomePageSrc.html");

String srcStr= "";

*try*{

srcStr= Streams./readString/(src);

// now replacing my special _markup_ "tag" with a real _html_ tag

srcStr= srcStr.replace("${tile}", "<div wicket:id=\"tile\"></div>");

// and adding the component to the page

HomePage.*this*.add(*new*Label("tile", Model./of/("Content of dynamic component aka tile.")));

} *catch*(IOException e) {

// *TODO*Auto-generated catch block

e.printStackTrace();

}

StringResourceStream stringResourceStream= *new*StringResourceStream(srcStr, "text/html");

*return*stringResourceStream;

}

A quickstart is attached. Just switch the version number in the pom.xml: It works with 7.2 and breaks with 7.3.

My question now. Is this kind of technology wrong with 7.3 (or was it always a bad idea) and how should it be done now, or is 7.3 overreacting?

Mit freundlichen Grüßen / Kind regards

Ingo Renner



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to