Use org.apache.wicket.request.handler.RenderPageRequestHandler.RenderPageRequestHandler(IPageProvider, RedirectPolicy) with org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy.NEVER_REDIRECT
On Thu, Sep 29, 2011 at 2:01 PM, Stefan Neumann <[email protected]> wrote: > Hey, > > I tried to use a MockWebRespone: > > // final StringResponse newResponse = new StringResponse(); > final MockWebResponse mockWebResponse = new MockWebResponse(); > requestCycle.setResponse(mockWebResponse); > pageRenderer.respond(requestCycle); > requestCycle.setResponse(oldResponse); > > return mockWebResponse.getTextResponse().toString(); > > But the getTextRespone() is null, because there is a redirect to the > correct mapped url: > > "print/<external-id>" > > Can I follow this redirect? > > > > 2011/9/29 Stefan Neumann <[email protected]>: >> Hey Martin, >> >> I get now a CastException in: >> >> Root cause: >> >> java.lang.ClassCastException: >> org.apache.wicket.response.StringResponse cannot be cast to >> org.apache.wicket.request.http.WebResponse >> at >> org.apache.wicket.request.handler.render.WebPageRenderer.redirectTo(WebPageRenderer.java:134) >> at >> org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:214) >> at >> com.freiheit.tango.presentation.application.WicketUtils.renderPageNew(WicketUtils.java:54) >> >> the corresponing line is: >> >> final WebApplication application = WebApplication.get(); >> >> final RenderPageRequestHandler handler = new >> RenderPageRequestHandler(new PageProvider(pageClass, pageParameters)); >> final PageRenderer pageRenderer = >> application.getPageRendererProvider().get(handler); >> >> final Response oldResponse = requestCycle.getResponse(); >> final StringResponse newResponse = new StringResponse(); >> requestCycle.setResponse(newResponse); >> >> --> pageRenderer.respond(requestCycle); <--- >> requestCycle.setResponse(oldResponse); >> >> return newResponse.toString(); >> >> But seems to get closer ;-) >> >> I can add the ticket when my case is running. >> >> Greetings >> Stefan >> >> 2011/9/29 Martin Grigorov <[email protected]>: >>> I guess I need to add an example of this in wicket-examples ... >>> Please create a ticket to not forget it. >>> >>> Here is how it should work: >>> >>> IRequestHandler handler = new RenderPageRequestHandler(Page.class, >>> parameters); >>> PageReneder renderer = >>> application.getgetPageRendererProvider().get(handler); >>> >>> oldResponse = requestCycle.getResponse(); >>> StringResponse newResponse = new StringResponse(); >>> requestCycle.setResponse(newResponse); >>> >>> renderer.respond(requestCycle); >>> requestCycle.setResponse(oldResponse); >>> >>> pageAsText = newResponse.toString(); >>> >>> On Thu, Sep 29, 2011 at 12:09 PM, Stefan Neumann >>> <[email protected]> wrote: >>>> Hey Martin, >>>> >>>> thanks for the quick response. It sounds quite good, but it is not >>>> working yet. >>>> >>>> Since we use guice, I tried to use the WebApplication we have >>>> configured already: >>>> >>>> final WicketTester wicketTester = new >>>> WicketTester(WebApplication.get()); >>>> wicketTester.startPage(pageClass,pageParameters); >>>> return wicketTester.getLastResponseAsString(); >>>> >>>> But I get following exception[1]. >>>> >>>> Some more basic conditions. >>>> * A request is currently running. >>>> * I need to get session information into the rendering, since the data >>>> loading for the page contains authorization checks on the currently >>>> logged in user. >>>> >>>> Any suggestions? >>>> >>>> Stefan >>>> >>>> >>>> >>>> >>>> Caused by: java.lang.reflect.InvocationTargetException >>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native >>>> Method) >>>> at >>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) >>>> at >>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) >>>> at java.lang.reflect.Constructor.newInstance(Constructor.java:513) >>>> at >>>> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:177) >>>> ... 37 more >>>> Caused by: java.lang.IllegalStateException: Application name can only >>>> be set once. >>>> at org.apache.wicket.Application.setName(Application.java:846) >>>> at >>>> org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:291) >>>> at >>>> org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:241) >>>> at >>>> org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:192) >>>> at >>>> com.freiheit.tango.presentation.application.WicketUtils.renderPageWithWicketTester(WicketUtils.java:43) >>>> at >>>> com.freiheit.tango.presentation.dashboard.DashboardPage.<init>(DashboardPage.java:124) >>>> at >>>> com.freiheit.tango.presentation.dashboard.DashboardPage.<init>(DashboardPage.java:108) >>>> at >>>> com.freiheit.tango.presentation.dashboard.DashboardPage.<init>(DashboardPage.java:104) >>>> ... 42 more >>>> >>>> >>>> 2011/9/29 Martin Grigorov <[email protected]>: >>>>> use WicketTester.startPage() and tester.getLastResponseAsString() >>>>> >>>>> On Thu, Sep 29, 2011 at 11:06 AM, Stefan Neumann >>>>> <[email protected]> wrote: >>>>>> Hey guys, >>>>>> >>>>>> I need to render a page to a String or file. I have already read the >>>>>> typical reference [1] [2] for this topic. >>>>>> >>>>>> The difference is, that I am using wicket 1.5 and there must be some >>>>>> API changes so I could not use the given examples. >>>>>> >>>>>> Has someone an example? I tried my best to make the exampel compile >>>>>> but i alwas get a NPE at >>>>>> bufferedWebResponse.getText().toString() >>>>>> >>>>>> Appreciate your help in advance, >>>>>> >>>>>> Stefan >>>>>> >>>>>> >>>>>> [1] >>>>>> http://www.danwalmsley.com/2008/10/21/render-a-wicket-page-to-a-string-for-html-email/ >>>>>> [2] >>>>>> https://gist.github.com/1152059 >>>>>> [3] >>>>>> public static String renderPage(final Class<? extends Page> >>>>>> pageClass, final PageParameters pageParameters) >>>>>> { >>>>>> final WebApplication application = WebApplication.get(); >>>>>> final ServletContext context = >>>>>> application.getServletContext(); //fake a request/response cycle >>>>>> final MockHttpSession servletSession = new >>>>>> MockHttpSession(context); >>>>>> servletSession.setTemporary(true); >>>>>> final MockHttpServletRequest servletRequest = new >>>>>> MockHttpServletRequest(application, servletSession, context); >>>>>> final MockHttpServletResponse servletResponse = new >>>>>> MockHttpServletResponse(servletRequest); //initialize request and >>>>>> response >>>>>> servletRequest.initialize(); >>>>>> servletResponse.initialize(); >>>>>> >>>>>> final ServletWebRequest webRequest = new >>>>>> ServletWebRequest(servletRequest,"/"); >>>>>> final WebResponse webResponse = new >>>>>> ServletWebResponse(webRequest,servletResponse); >>>>>> final BufferedWebResponse bufferedWebResponse = new >>>>>> BufferedWebResponse(webResponse); >>>>>> //webResponse.setAjax(true); >>>>>> final RequestCycle requestCycle = new RequestCycle( >>>>>> new RequestCycleContext(webRequest, webResponse, >>>>>> application.getRootRequestMapper(, >>>>>> application.getExceptionMapperProvider().get())); >>>>>> >>>>>> //requestCycle.setRequestTarget(new >>>>>> BookmarkablePageRequestTarget(pageClass, pageParameters)); >>>>>> requestCycle.setResponsePage(pageClass, pageParameters); >>>>>> >>>>>> try >>>>>> { >>>>>> final boolean handled = >>>>>> requestCycle.processRequestAndDetach(); >>>>>> >>>>>> >>>>>> LOGGER.info("Response after request: " + >>>>>> bufferedWebResponse.getText().toString()); >>>>>> >>>>>> if (! handled) >>>>>> { >>>>>> LOGGER.error(">>>>>>>>>>>>>>>>>>>>>>> NOT HANDLED"); >>>>>> //requestCycle.set(new >>>>>> ErrorCodeRequestHandler(HttpServletResponse.SC_NOT_FOUND)); >>>>>> } >>>>>> >>>>>> //requestCycle.detach(); >>>>>> } >>>>>> finally >>>>>> { >>>>>> requestCycle.getResponse().close(); >>>>>> } >>>>>> >>>>>> return bufferedWebResponse.getText().toString(); >>>>>> } >>>>>> >>>>>> -- >>>>>> Stefan Neumann >>>>>> Dipl.-Ing. >>>>>> freiheit.com technologies gmbh >>>>>> Straßenbahnring 22 / 20251 Hamburg, Germany >>>>>> fon +49 (0)40 / 890584-0 >>>>>> fax +49 (0)40 / 890584-20 >>>>>> HRB Hamburg 70814 >>>>>> 1CB2 BA3C 168F 0C2B 6005 FC5E 3EBA BCE2 1BF0 21D3 >>>>>> Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: [email protected] >>>>>> For additional commands, e-mail: [email protected] >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Martin Grigorov >>>>> jWeekend >>>>> Training, Consulting, Development >>>>> http://jWeekend.com >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [email protected] >>>>> For additional commands, e-mail: [email protected] >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Stefan Neumann >>>> Dipl.-Ing. >>>> freiheit.com technologies gmbh >>>> Straßenbahnring 22 / 20251 Hamburg, Germany >>>> fon +49 (0)40 / 890584-0 >>>> fax +49 (0)40 / 890584-20 >>>> HRB Hamburg 70814 >>>> 1CB2 BA3C 168F 0C2B 6005 FC5E 3EBA BCE2 1BF0 21D3 >>>> Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>>> >>> >>> >>> >>> -- >>> Martin Grigorov >>> jWeekend >>> Training, Consulting, Development >>> http://jWeekend.com >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> >> >> >> -- >> Stefan Neumann >> Dipl.-Ing. >> freiheit.com technologies gmbh >> Straßenbahnring 22 / 20251 Hamburg, Germany >> fon +49 (0)40 / 890584-0 >> fax +49 (0)40 / 890584-20 >> HRB Hamburg 70814 >> 1CB2 BA3C 168F 0C2B 6005 FC5E 3EBA BCE2 1BF0 21D3 >> Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof >> > > > > -- > Stefan Neumann > Dipl.-Ing. > freiheit.com technologies gmbh > Straßenbahnring 22 / 20251 Hamburg, Germany > fon +49 (0)40 / 890584-0 > fax +49 (0)40 / 890584-20 > HRB Hamburg 70814 > 1CB2 BA3C 168F 0C2B 6005 FC5E 3EBA BCE2 1BF0 21D3 > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
