I'm answering for Johan (he is having mail problems): The Wicket Include way only seems to work for servlets that have a mapping in web.xml so you have an URL to call? But what if you have legacy servlets bundled in your project that have no mapping but only the "servlet" part (and you don't want to expose them), then you have no URL to call.
/Christian On Tue, Feb 21, 2012 at 15:34, Martin Grigorov <[email protected]> wrote: > Have you tried with org.apache.wicket.markup.html.include.Include ? > It does exactly what you need. > > On Tue, Feb 21, 2012 at 3:20 PM, Johan Isaksson <[email protected]> wrote: >> Hi! >> Seven days ago I posted a question on the users mailing list (see below), >> but I have got no responses so far. I thought I'll give it a try with the >> developers list as well. Since my question to the users list I also found >> that our 1.4 approach is very much alike what's described on the Wicket >> wiki >> https://cwiki.apache.org/WICKET/including-jsp-files-in-html-templates.html. >> So there might be more projects bumping into this issue soon. >> >> I also posted this question on SO, >> http://stackoverflow.com/questions/9257706/wicket-1-5-and-jsp-servlet-wrapping >> >> Thanks, >> >> Johan >> ---------- Forwarded message ---------- >> From: Johan Isaksson <[email protected]> >> Date: 2012/2/14 >> Subject: Wicket 1.5 and JSP/servlet wrapping >> To: [email protected] >> >> Hi! >> >> In the project I'm on we want to upgrade from Wicket 1.4 to 1.5 (1.5.4) and >> one major thing is not working yet. >> There's a need to wrap old JSP/servlets into the new Wicket based >> application and the old 1.4-approach is not working anymore. >> >> Simplified html output in 1.4 >> <body> >> <div id="container"> >> wrappedContentFromJsp >> </div> >> <body> >> >> Simplified html output in 1.5 >> <body> >> wrappedContentFromJsp >> <div id="container"> >> </div> >> <body> >> >> So, all the JSP content renders outside the tag that we like to wrap it in. >> The wrapping magic happens in our internal AbstractServletWrapperPanel and >> the WebMarkupContainer.onRender(MarkupStream markupStream) override. >> However, in Wicket 1.5 we can't invoke markupStream.next() since it's no >> longer provided. I have not found a way around this yet. >> >> Working code for 1.4 with a sample panel implementation as reference: >> public abstract class AbstractServletWrapperPanel extends Panel { >> >> public AbstractServletWrapperPanel(String id, final String >> servletName, String tagId) { >> super(id); >> add(new WebMarkupContainer(tagId) { >> >> @Override >> protected void onRender(MarkupStream markupStream) { >> markupStream.next(); >> try { >> WebRequestCycle cycle = (WebRequestCycle) RequestCycle.get(); >> ServletRequest request = >> cycle.getWebRequest().getHttpServletRequest(); >> ServletResponse response = >> cycle.getWebResponse().getHttpServletResponse(); >> ServletContext context = ((WebApplication) >> Application.get()).getServletContext(); >> RequestDispatcher rd = context.getNamedDispatcher(servletName); >> if (rd != null) { >> rd.include(request, response); >> } else { >> // handling... >> } >> } catch (Exception e) { >> // handling... >> } >> } >> }); >> } >> } >> >> //Impl >> public class WrapperPanel extends AbstractServletWrapperPanel { >> private static final long serialVersionUID = 1L; >> >> public WrapperPanel(String id, final String servletName) { >> super(id, servletName, "wrappedContentId"); >> } >> } >> >> //WrapperPanel html >> <body> >> <wicket:panel> >> <wicket:container wicket:id="wrappedContentId"/> >> </wicket:panel> >> </body> >> >> In the 1.5 version I'm getting the request and response via >> * (HttpServletRequest)RequestCycle.get().getRequest().getContainerRequest() >> * >> (HttpServletResponse)RequestCycle.get().getResponse().getContainerResponse() >> >> Then I've tried to: >> >> * use the onRender()-magic without markupStream.next() that's no longer >> provided in 1.5 >> * move it to onComponentTagBody(MarkupStream markupStream, ComponentTag >> tag) >> * Note: To invoke onComponentTagBody() I had to open up the container tag >> "<wicket:container></wicket:container>". >> * I also tried without invoking markupStream.next() as that step is >> performed in Component.internalRenderComponent() just before >> onComponentTagBody is invoked at all. >> * move it to onComponentTag(ComponentTag tag) >> * combined above with setting setRenderBodyOnly(true) in the >> WebMarkupContatiner.onInitialize() >> * use a <div> tag instead of a wicket:container >> * use debug mode to track down the rendering process of 1.5. But still, I >> guess I'm missing out some key part of the new 1.5 way of rendering >> components. >> * invoke getAssociatedMarkupStream() from onRender() but that raises the >> following error >> * org.apache.wicket.markup.MarkupNotFoundException: Markup of type 'html' >> for component '... AbstractServletWrapperPanel$1' not found. >> >> Since it's not an option to migrate all that JSP functionality to Wicket >> anytime soon this is kind of a showstopper for us at the moment. >> >> For reference, the 1.4 way of doing this is much similar to the approach I >> found in the article >> http://herebebeasties.com/2007-03-01/jsp-and-wicket-sitting-in-a-tree/ >> >> I also posted this question on SO, >> http://stackoverflow.com/questions/9257706/wicket-1-5-and-jsp-servlet-wrapping >> >> Any help solving this issue would be very appreciated! >> >> Thanks, >> >> Johan > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com
