Wicket: how to render page programmatically and get result as string?

╄→尐↘猪︶ㄣ 提交于 2019-11-28 11:13:28

Two article regarding to this:

Render a Wicket page to a string for HTML email

Rendering Panel to a String

Currently the only other approach was using WicketTester for that, but I do not remember details how to do that.

If you just want the raw code, here it is: (This is practically the same as the solution described in the article.)

//I assumed that you want to use the current user's session for rendering. If this isn't the case, you'll have to use a mock session
MockHttpServletRequest mockReq = new MockHttpServletRequest( WebApplication.get(), ((WebRequest)getRequest()).getHttpServletRequest().getSession(), WebApplication.get().getServletContext() ); 
MockHttpServletResponse mockRes = new MockHttpServletResponse( mockReq );
WebResponse res = new WebResponse(mockRes);
ServletWebRequest req = new ServletWebRequest( mockReq );
RequestCycle cycle = new WebRequestCycle( WebApplication.get(), req, res );
PageParameters pp = new PageParameters();
//add page parameters here
//Your email page should really be a bookmarkable page, but if it isn't, you can replace the request target with something that better suits your case
cycle.request( new BookmarkablePageRequestTarget( EmailPage.class, pp ));
System.out.println( mockRes.getDocument() );

For newer Wicket versions: 6.7.0 came with a new ComponentRenderer precisely for this purpose!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!