Hello,
can you please give some hint how to create component, which does not nead
markup and to which I can add children ?
The intent is to be able create pages without need to create html for such
pages at all - basically rendering driven by component structure and not
by markup.

I've tryied it like following and it is working for me now, but most
probably there is better / more elegant way or some problem I do not see.


Thank you in advance for any hints and comments.

saki



public class Panel extends WebMarkupContainer
{

...

        /**
         * Renders this container.
         */
        protected void onRender(MarkupStream markupStream)
        {
                Response response = getResponse();
                boolean writeTag = !getRenderBodyOnly();
                if (writeTag) {
                        response.write(markupStream.get().toCharSequence());
                }
                layoutManager.startLayout(response);


                int currentIndex = markupStream.getCurrentIndex();
                int iteration = 0;
                // Iterate through children on this container
                for (Iterator iterator = iterator(); iterator.hasNext();)
                {
                        iteration ++;
                        // Get next child component
                        final Component component = (Component)iterator.next();

                        if (component == null)
                        {
                                throw new WicketRuntimeException(
                                                "Loop item is null.  Probably 
the number of loop iterations were
changed between onBeginRequest and render time.");
                        }
                        layoutManager.startLayout(response, component);

                        // Rewind to start of markup for kids
                        markupStream.setCurrentIndex(currentIndex);
                        if (component instanceof Panel) {
                                component.render(markupStream);
                        }       else if (component instanceof 
WebMarkupContainerWithAssociatedMarkup) {
                                WebMarkupContainerWithAssociatedMarkup 
markupContainer =
(WebMarkupContainerWithAssociatedMarkup) component;
                                markupContainer.renderAssociatedMarkup("panel",
"exceptionMessage");//(" saki exceptionMessage");
                        } else if (component instanceof MarkupContainer) {
                                MarkupContainer markupContainer = 
(MarkupContainer) component;
                                MarkupStream markupStream2 =
getApplication().getMarkupCache().getMarkupStream(markupContainer);
                                component.render(markupStream2);
                        } else {
                                component.render();
                        }
                        layoutManager.endLayout(response, component);
                }
                layoutManager.endLayout(response);



                markupStream.setCurrentIndex(currentIndex);
                while (!markupStream.atCloseTag())
                        markupStream.next();
                if (writeTag) {
                        response.write(markupStream.get().toCharSequence());
                }
        }

...

}



Notes:
- layoutManager is just just to write some markup around children (for
example table)
- html files must be created for components whose markup is normally in
parent component (eg. TextField, Form, ...).


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Wicket-develop mailing list
Wicket-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-develop

Reply via email to